题目
给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
输入: s = "Let's take LeetCode contest"
输出: "s'teL ekat edoCteeL tsetnoc"
分析
题目要求要将单词顺序反转,同时保留空格。
- 首先分割数组,这样我们得到每个独立的单词的数组
- 然后遍历数组,将数组中的每一项再次分割,并反转,再拼接在一起
- 最后,我们将数组在拼接成字符串
代码实现
第一步
分割数组
s.split(' ')
第二步
遍历数组,然后分割每一项,反转,再拼接在一起
item.split('').reverse().join('')
第三步
将数组在拼接成字符串
s.split(' ').map(item => item.split('').reverse().join('')).join(' ')
整体代码如下
let reverseWords = function(s) {
return s.split(' ').map(item => item.split('').reverse().join('')).join(' ')
}
优化
换一种思路,
我们先处理每个单词,我们要定义两个参数word和final
- 利用
for循环将每个单词都反转下,将这个参数赋值给word - 然后再处理空格,遇到空格就把单词赋值到
final,同时清空word - 这样我们得到的
final少了最后一个单词,所以最后我们要在加上word
实现第一步
let word = '', final = '', len = s.length
for (let i = 0; i < len; i++) {
if (s[i] !== ' ') {
word = s[i] + word
}
}
实现第二步
final += (word + ' ')
word = ''
实现第三步
final += word
完整代码如下
let reverseWords = function (s) {
let word = '', final = '', len = s.length
for (let i = 0; i < len; i++) {
if (s[i] !== ' ') {
word = s[i] + word
} else {
final += (word + ' ')
word = ''
}
}
final += word
return final
}