给定一个字符串,逐个翻转字符串中的每个单词。
    示例 1:

    1. 输入: "the sky is blue"
    2. 输出: "blue is sky the"

    示例 2:

    1. 输入: " hello world! "
    2. 输出: "world! hello"
    3. 解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

    示例 3:

    1. 输入: "a good example"
    2. 输出: "example good a"
    3. 解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

    说明:

    • 无空格字符构成一个单词。
    • 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
    • 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

    解法1:

    1. var reverseWords = function(s) {
    2. return s.trim().replace(/\s+/g,' ').split(' ').reverse().join(' ');
    3. }

    正则中,\s表示匹配任何空白字符,包括空格、制表符、换页符等,等价于[ \f\n\r\t\v]。
    而\s+则表示匹配任意多个任何空白字符。

    解法2:
    双端队列解法
    leetcode151:翻转字符串里的单词 - 图1

    1. var reverseWords = function(s) {
    2. let left=0;
    3. let right=s.length-1;
    4. const queue=[];
    5. let word='';
    6. while(s[left]===' '){
    7. left++;
    8. }
    9. while(s[right]===' '){
    10. right--;
    11. }
    12. while(left<=right){
    13. if(s[right]!==' '){
    14. word=s[right]+word;
    15. }
    16. else{
    17. if(word!==''){
    18. queue.push(word);
    19. }
    20. word='';
    21. }
    22. right--;
    23. }
    24. //最后一个单词
    25. queue.push(word);
    26. return queue.join(' ');
    27. }