题目
给你一个字符串 s
,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s
中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
输入: s = "the sky is blue" 输出: "blue is sky the"
思路一
我们使用js中的api实现一下,首先们将s参数使用trim方法先把前后的空格符裁剪,在使用split方法结合正则将中间空格符的字符串切割成单词,因为中间空格符可能是多个,所以我们用正则/ +/表示一个或多个空格符,然后使用数组中reverse方法将数组进行翻转,最后使用最后使用join方法将数组以空格的方式拼接成字符串返回出去
/** * @param {string} s * @return {string} */ var reverseWords = function(s) { return s.trim().split(/ +/).reverse().join(' '); };
思路二
我们先使用trim方法去掉两边的空格重新赋值给s参数,然后在声明res变量和cur变量,这两个变量默认为空字符串,然后再声明hasBlank变量作为空格标记,默认为false,接下来使用for循环进行倒序循环,在循环中使用cur变量来记录当前循环的单词,当循环中遇到空格时,我们就把cur变量加到res变量中,并且将hasBlank变量为true,为了防止出现多个空格的情况添加多个空格,当循环走到最后一个单词的时候,不会在循环中去进行空格拼接,所以我们在循环外去拼接最后一个空格
/** * @param {string} s * @return {string} */ var reverseWords = function(s) { s = s.trim(); let res = ''; let cur = ''; let hasBlank = false; for(let i=s.length-1;i>=0;i--){ if(s[i] !== ' ') { hasBlank = false; cur = s[i] + cur; } else { if(!hasBlank) { cur = cur + ' '; res = res+cur; cur=''; hasBlank = true; } } } res = res+cur; return res; };