151. 反转字符串中的单词 JavaScript实现

114 阅读1分钟

151. 反转字符串中的单词

一、API解法

在这里插入图片描述

var reverseWords = function(s) {
    // 1、使用trim去掉头尾的空格
    // 2、使用split 将字符串按空格分割成字符串数组,至少一个空格.
    // 3、使用 reverse 将字符串数组进行反转;
    // 4、使用空格进行相连
    return s.trim().split(/\s+/).reverse().join(" ");
};

二、双端队列

将分割和反转的任务利用双端队列进行实现

var reverseWords = function(s) {
    // 去掉空格
    s = s.trim()

    // 使用指针遍历,用队列进行反转--从头部压入元素。最后直接将队列中的元素用空格连接起来。
    let left = 0, right = s.length;
    let queue=[],word="";  // word来暂存每个单词
    
    // 用左右指针的终止条件好写,因为字符串中间有空格
    while(left < right){
        // charAt提取出下标对应的字符
        let char = s.charAt(left);

        // 判断char是否是空格。即将单个单词提取出来,存放到队列中
        // 为了应对多个空格情况,在拼接单个单词的时候.注意要判断word是否为空
        if(char == " " && word){
            queue.unshift(word);  // 从头部插入,达到反转的效果
            word = ""; // 再次置空,迎接下一个的单词
        }else if(char != " "){
        	// 使用+运算符来拼接字符串
            word += char;
        }

        left++;
    }
    // 注意这里需要把最后一个单词当入队列中
     queue.unshift(word)
    // 将队列中的单词用单个空格进行连接
    return queue.join(" ")
};