一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第17天,点击查看活动详情。
一、题目
给你一个字符串 s ,颠倒字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
示例 1:
输入:s = "the sky is blue"
输出:"blue is sky the"
示例 2:
输入:s = " hello world "
输出:"world hello"
解释:颠倒后的字符串中不能存在前导空格和尾随空格。
示例 3:
输入:s = "a good example"
输出:"example good a"
解释:如果两个单词间有多余的空格,颠倒后的字符串需要将单词间的空格减少到仅有一个。
作者:力扣 (LeetCode) 链接:leetcode-cn.com/leetbook/re… 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
二、思路
思路1
- 首先看下例子三
- 它中中间有多个空格,首先我们要将这种情况排除掉
- 那么就通过while循环
- 判断的条件是只有(s[i] != ' ' || s[i - 1] != ' ')
- 也就是前后只能有一个空格时才能通过
- 通过叠加拿到的数据就是只有一个空格的数据
- 之后我们通过split(' ')切割成数组,然后用reverse()做下倒叙,再通过join(' ')拼接
- 这样就得到数据了
思路2
- 优化方案
- 通过正则匹配处理多余的空格 \s 匹配任何空白字符 +匹配前面的子表达式一次或者多次
三、代码
执行代码1
let reverseWords = function(s) {
/**
* 首先看下例子三
* 它中中间有多个空格,首先我们要将这种情况排除掉
* 那么就通过while循环
* 判断的条件是只有(s[i] != ' ' || s[i - 1] != ' ')
* 也就是前后只能有一个空格时才能通过
* 通过叠加拿到的数据就是只有一个空格的数据
* 之后我们通过split(' ')切割成数组,然后用reverse()做下倒叙,再通过join(' ')拼接
* 这样就得到数据了
*
* */
let len = s.length, index = 1, i = 1, newStr = s[0]
while(i < len) {
if(s[i] != ' ' || s[i - 1] != ' ') {
newStr += s[i]
index++
}
i++
}
let newArr = newStr.trim().split(' ').reverse().join(' ')
return newArr
}
reverseWords(s)
代码1优化
let reverseWords = function(s) {
/**
* 优化方案
* 通过正则匹配处理多余的空格 \s 匹配任何空白字符 +匹配前面的子表达式一次或者多次
*
* */
let newArr = s.trim().split(/\s+/).reverse().join(' ')
return newArr
}
reverseWords(s)