【leetcode】151. 反转字符串中的单词

43 阅读1分钟

leetcode-151.png

这一题也是比较简单,swap单词即可,但是根据题目的要求,在给定的测试用例里面会出现首尾都有空格的情况,然后中间也会出现多个空格相连的情况,所以用split(' ')是不行的

错误代码

var reverseWords = function (s) {
    let strs = s.split(' ')
    var swap = function (strs) {
        let i = 0
        let j = strs.length - 1
        while (i < j) {
            [strs[i], strs[j]] = [strs[j], strs[i]]
            i++
            j--
        }
    }
    swap(strs)
    return strs.join(' ')
};

未通过的测试用例

通过的测试用例.png

正确代码

需要去除首尾空格,使用trim来实现,然后去除中间过多的空格,用正则表达来实现

var reverseWords = function (s) {
    let strs = s.trim().split(/\s+/)
    return strs.reverse().join(' ')
};

记录单词,reverse

var reverseWords = function (s) {
    let start = 0,
        end = 0,
        i = 0;
    let arr = [];
    while (i < s.length) {
        while (i < s.length && s[i] === " ") i++;
        if(i >= s.length) break // 防止最后的空格被记录
        start = i;
        while (i < s.length && s[i] !== " ") i++;
        end = i;
        arr.push(s.slice(start, end));
        i++;
    }
    return arr.reverse().join(" ");
};