算法练习day7

63 阅读1分钟

一、反转字符串

直接双指针

/**
 * @param {character[]} s
 * @return {void} Do not return anything, modify s in-place instead.
 */
var reverseString = function(s) {
    let left = 0
    let right = s.length - 1
    while(left < right) {
        [s[left], s[right]] = [s[right], s[left]]
        left++
        right--
    }
    return s
};

二、反转字符串2

先把字符串转为数组,遍历的时候间隔为2 * k,然后反转前k个

/**
 * @param {string} s
 * @param {number} k
 * @return {string}
 */
var reverseStr = function (s, k) {
    s = s.split('')
    for (let i = 0; i < s.length; i += 2 * k) {
        let left = i
        let right = i + k - 1
        while (left < right) {
            [s[left], s[right]] = [s[right], s[left]]
            left++
            right--
        }
    }
    return s.join('')
};

三、翻转字符串里的单词

/**
 * @param {string} s
 * @return {string}
 */
var reverseWords = function(s) {
    let res = []
    let cur = ''
    for(let i = 0; i < s.length; i++) {
        if(s[i] === ' ') {
            if(cur) {
                res.push(cur)
                cur = ''
            }
        } else {
            cur += s[i]
        }
    }
    if (cur) {
        res.push(cur)
    }

    let left = 0
    let right = res.length - 1
    while(left < right) {
        [res[left], res[right]] = [res[right], res[left]];
        left++
        right--
    }
    return res.join(' ')
};