打卡-算法训练营-Day9 |151.翻转字符串里的单词;卡码网:55.右旋转字符串

98 阅读1分钟

翻转字符串里的单词

leetcode链接:leetcode.cn/problems/re…

在不考虑多余空格的情况下,思路是先把整个字符串反转,然后再反转每一个单词

使用双指针来处理多余的空格,参考27.移除元素的思路

快指针:寻找符合新数组的元素

慢指针:更新新数组对应下标的元素

var reverseWords = function(s) {
    s = Array.from(s);
    removeExtraSpaces(s);
    // 翻转整个字符串
    reverse(s, 0, s.length);
    // 翻转每个单词
    let start = 0;
    for(let i = 0; i <= s.length;i++) {
        if (s[i] === " " || i === s.length) {
            reverse(s, start, i - 1);
            start = i + 1;
        }
    }
    return s.join("");
};

var removeExtraSpaces = function(strArr) {
    let slow = 0;
    for(let fast = 0; fast < strArr.length;fast++) {
        if (strArr[fast] !== " ") {
            // 除了第一个单词,其他单词需要在前面添加一个空格
            if (slow !== 0) {
                strArr[slow++] = " ";
            }
            // 批量移动每个单词元素
            while(fast < strArr.length && strArr[fast] !== " ") {
                strArr[slow++] = strArr[fast++];
            }
        }
    }
    // 移除尾部空格,直接修改数组的长度即可
    strArr.length = slow;
}

var reverse = function(strArr, start, end) {
    let left = start;
    let right = end;
    while (left <= right) {
        [strArr[left], strArr[right]] = [strArr[right], strArr[left]];
        left++;
        right--;
    }
}

右旋转字符串

链接:kamacoder.com/problempage…

和上一道题目思路相似,先整体反转,再分段反转

const readline = require('readline');

const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
});

const reverse = function(arr, left, right) {
    while(left < right) {
        let temp = arr[left];
        arr[left] = arr[right];
        arr[right] = temp;
        left++;
        right--;
    }
}

let lines = [];

rl.on('line', function(line){
    lines.push(line.trim());
    if (lines.length === 2) {
        let n = lines[0];
        let strArr = lines[1].split('');
        let length = strArr.length;
        
        // 整体反转
        reverse(strArr, 0, length - 1);
        // 分段反转
        reverse(strArr, 0, n - 1);
        reverse(strArr, n, length - 1);
        
        console.log(strArr.join(''));
    }
});