151.翻转字符串里的单词
给定一个字符串,逐个翻转字符串中的每个单词。
示例 1: 输入: "the sky is blue" 输出: "blue is sky the"
示例 2: 输入: " hello world! " 输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3: 输入: "a good example" 输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个
思路:
-
将字符串去除多余的空格
// 删除字符转多余的空格(操作数组) var removeExtraSpaces = function(s){ let l = 0, r = 0 while(r < s.length){ if(s[r] === ' ' && (r === 0 || s[r - 1] === ' ')){ // 删除开头和中间的空格 r ++ }else{ s[l ++] = s[r ++] } } s.length = s[l - 1] === ' ' ? l - 1 : l // 删除结尾的空格(直接赋值length) }
-
再将字符串全部反转
-
对于每个单词,在额外进行翻转
注意: JavaScript 对字符串的操作需要转换为数组
var reverseWords = function(s) { const res = s.split('') removeExtraSpaces(res) res.reverse() for(let l = 0, r = 0; r <= res.length; r ++){ if(res[r] === ' ' || r === res.length){ let start = l, end = r - 1 while(start < end){ [res[start], res[end]] = [res[end], res[start]]; start ++ end -- } l = r + 1 } } return res.join('') };