第一眼看上去我直接就是reverse秒杀,然后想想用库函数并不会更自己带来神什么提升,尝试使用别的方法
方法1:
var reverseString = function(s) {
let mid;
let right = s.length -1;
// 通过求数组中间数,决定循环的次数
if (s.length% 2 !== 0) {
mid = Math.floor(s.length/ 2)
} else {
mid = s.length/2;
}
// 然后置换元素
for (let i = 0; i < mid; i++) {
let temp = s[i];
s[i] = s[right - i];
s[right - i] = temp
}
}
方法2: 发现方法1的求中间下标值有些多余,其实只要用双指针,判断左指针小于右指针就行了,这样不用判断数组长度是奇数还是偶数。
var reverseString = function(s) {
let l = 0;
let r = s.length -1;
while(l < r) {
let temp = s[r];
s[r] = s[l];
s[l] = temp;
l++;
r--;
}
};
var reverseStr = function(s, k) {
let resArr =s.split('');
let len = resArr.length;
for (let i = 0; i < len; i += 2 * k) {
// 剩余字符的前k个字符反转
let l = i - 1, r = i + k > len ? len : i + k;
while(++l < --r) {
[resArr[l], resArr[r]] = [resArr[r], resArr[l]];
}
}
return resArr.join('')
}
var replaceSpace = function(s) {
let arr = s.split('');
for(let i = 0; i < arr.length; i++) {
if (arr[i] == ' ') {
arr[i] = '%20';
}
}
return arr.join('');
};
var reverseWords = function(s) {
// 相比剑指Offer 05.替换空格 多了一步处理空格操作
let arr = s.split(' ');
// 去除所有的空字符串
for (let i = 0; i < arr.length; i++) {
if (arr[i] == '') {
arr.splice(i, 1);
i--;
}
}
// 然后做反转处理
let l = 0, r = arr.length - 1;
while (l < r) {
let temp = arr[r];
arr[r] = arr[l];
arr[l] = temp;
l++;
r--;
}
return arr.join(' ');
};
var reverseLeftWords = function (s, n) {
let start = s.slice(0, n);
let end = s.slice(n);
return end + start;
};