给定一个字符串,逐个翻转字符串中的每个单词。
示例 1:
输入: "the sky is blue"输出: "blue is sky the"
示例 2:
输入: " hello world! "输出: "world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:
输入: "a good example"输出: "example good a"解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
说明:
- 无空格字符构成一个单词。
- 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
- 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
解法1:
var reverseWords = function(s) {return s.trim().replace(/\s+/g,' ').split(' ').reverse().join(' ');}
正则中,\s表示匹配任何空白字符,包括空格、制表符、换页符等,等价于[ \f\n\r\t\v]。
而\s+则表示匹配任意多个任何空白字符。
解法2:
双端队列解法
var reverseWords = function(s) {let left=0;let right=s.length-1;const queue=[];let word='';while(s[left]===' '){left++;}while(s[right]===' '){right--;}while(left<=right){if(s[right]!==' '){word=s[right]+word;}else{if(word!==''){queue.push(word);}word='';}right--;}//最后一个单词queue.push(word);return queue.join(' ');}
