代码随想录算法训练营第九天|151.翻转字符串里的单词 、卡码网55.右旋转字符串 、28. 实现 strStr() 、459.重复的子字符串

71 阅读1分钟

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.重复的子字符串

相关链接: 题目链接 文章讲解 视频讲解

解题思路

代码