开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情
题目
给你一个字符串 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;
};