题目
给你一个字符串 s
,请你反转字符串中 单词 的顺序
输入: s = "the sky is blue" 输出: "blue is sky the"
题解
第一种
我们这里先定义一个常量 SPACE,表示空格符号,然后在定义两个数组变量,ret 和 word,分别用于保存颠倒单词顺序后的字符串和当前单词的字符数组,在将输入的字符串 s 后面加上一个空格符号,我们为了方便处理最后一个单词,接下来进行循环遍历字符串 s 中的每个字符,如果当前字符是空格符号,表示一个单词结束,将当前单词字符数组转换为字符串并插入到 ret 数组的开头,同时清空 word 数组;如果当前字符不是空格符号,将其加入到 word 数组中,最后将 ret 数组中的所有单词按照空格符号拼接成一个字符串并返回
var reverseWords = function (s) { const SPACE = ' '; let ret = [], word = []; s += SPACE; for (let i = 0; i < s.length; i++) { const char = s[i]; if (char === SPACE) { if (i !== 0 && s[i - 1] !== SPACE) { ret.unshift(word.join('')); word = []; } else { continue; } } else { word.push(char); } } return ret.join(SPACE); };
第二种
函数接受一个字符串 s 作为参数,并返回翻转后的字符串。 首先,在函数内部声明了一个变量 result,用于存储翻转后的字符串。 然后,使用一个 while 循环遍历字符串 s,循环的条件是 i < s.length,即遍历到字符串末尾。 在循环中,首先判断当前字符是否为空格,如果不是空格,则进入内层的 while 循环。 内层循环的条件是 j <= s.length,即遍历到字符串末尾或者空格。在内层循环中,首先判断当前字符是否为空格,如果是空格或者已经遍历到字符串末尾,则将从 i 到 j 的子字符串取出来,作为一个单词。 然后,判断 result 是否为空,如果为空,则将当前单词直接赋值给 result;如果不为空,则将当前单词和 result 拼接起来,并加上一个空格。 接着,将 i 的值更新为 j,继续循环遍历字符串。 最后,返回翻转后的字符串 result
var reverseWords = function (s) { let result = ''; let i = 0; while (i < s.length) { if (s[i] !== ' ') { let j = i; while (j <= s.length) { if (!s[j] || s[j] === ' ') { let word = s.slice(i, j); if (!result) { result += word; } else { result = `${word} ${result}`; } i = j; break; } j += 1; } } i += 1; } return result; };