557. Reverse Words in a String III
解题思路
- 通过split 方法转换为数组
- 通过对数组中的每一项进行反转
- 最后通过join合成反转后的结果
代码
var reverseWords = function(s) {
const arr = s.split(' ')
for(let i = 0;i < arr.length; i++) {
const strs = arr[i]
let right = 0
let left = strs.length - 1
let result = strs.split('')
while(left > right) {
let temp = result[right]
result[right] = result[left]
result[left] = temp
right++
left--
}
arr[i] = result.join('')
}
return arr.join(' ')
};
字串法
子串的定义: 例如 'aa bb' 那么 'aa ' 与 'bb'都是 'aa bb'的字串
解题思路
- 需要维护两个指针 start 字串的开头 end 字串的结尾
- 每次开始时 start 与 end是重合的,所以每次循环的开始首先赋值star 即
let start = end - 利用
s.indexOf(' ', start)确定 end 的位置,注意最后一个字串既没有空格的需要特殊处理下 - 将 start => end 倒序添加进入 result
- 将空格加入 result,同样的注意最后一个字串既没有空格的不需要添加空格
代码
var reverseWords = function (s) {
let n = s.length
let end = 0
let result = []
while (end < n) {
let start = end
end = s.indexOf(' ', start)
// 说明到了最后一个子字符串
if(end === -1) {
end = n
}
// 将 start => end 倒序添加 result
for (let i = start; i < end; i++) {
// 例如 ` abc ` start 指向了 a位置, end指向了c后的空格位置,倒叙添加从 c 开始即 end - 1 + start - i
result.push(s[end - 1 + start - i])
}
// 因为最后 end 会出现 end = s.length情况即 end所指的值超出了s的范围, 那么在这种情况下不添加空格 ' '
if (end < n) {
result.push(' ')
}
end++
}
return result.join('')
};