151.翻转字符串里的单词
解题思路
快慢指针先去除多余的空格
先全局翻转,然后再每个单词翻转
代码
var reverseWords = function(s) {
var arrstr = s.split('');
removespace(arrstr);
reverse(arrstr,0, arrstr.length-1);
var start = 0;
for(let i = 0; i<=arrstr.length; i++){
if(arrstr[i]===' ' || i == arrstr.length){
reverse(arrstr,start, i-1);
start = i + 1;
}
}
return arrstr.join('');
};
var removespace = function(arr){
var slow = 0, fast = 0;
for(let i = 0; i < arr.length; i++){
if(arr[fast] === ' ' && (fast===0 || (fast> 0 && arr[fast-1]===' '))){
fast++;
}else{
arr[slow] = arr[fast];
slow++;
fast++;
}
}
// 移除末尾空格
arr.length = arr[slow - 1] === ' ' ? slow - 1 : slow;
};
var reverse = function(arr,start,end){
while(start < end){
[arr[start],arr[end]] = [arr[end],arr[start]];
start++;
end--;
}
}
卡码网55.右旋转字符串
解题思路
代码
// JS中字符串内不可单独修改
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
const inputs = []; // 存储输入
rl.on('line', function(data) {
inputs.push(data);
}).on('close', function() {
const res = deal(inputs);
// 打印结果
console.log(res);
})
function deal(inputs){
let [k, s] = inputs;
var arrs = s.split('');
var left = s.length - k;
var substr = s.substr(left);
var r = arrs.length - 1;
for(var i = s.length-k-1,j = s.length-1;i>=0,j>=k;i--,j--){
arrs[j] = arrs[i]
}
for(let i=0;i<k;i++){
arrs[i] = substr[i];
}
return arrs.join('');
}
28. 实现 strStr()
解题思路
代码
459.重复的子字符串
解题思路
代码