//输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",
//则输出"student. a am I"。 
//
// 
//
// 示例 1: 
//
// 输入: "the sky is blue"
//输出: "blue is sky the"
// 
//
// 示例 2: 
//
// 输入: "  hello world!  "
//输出: "world! hello"
//解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
// 
//
// 示例 3: 
//
// 输入: "a good   example"
//输出: "example good a"
//解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
// 
//
// 
//
// 说明: 
//
// 
// 无空格字符构成一个单词。 
// 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。 
// 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。 
// 
//
// 注意:本题与主站 151 题相同:https://leetcode-cn.com/problems/reverse-words-in-a-string/ 
//
//
// 注意:此题对比原题有改动 
// Related Topics 字符串 
// 👍 66 👎 0

/*
* 剑指 Offer 58 - I 翻转单词顺序
* 2021-02-18 11:46:27
* @author oxygenbytes
*/ 
#include "leetcode.h" 
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public:
    string reverseWords(string s) {
        if(s.size() <= 0)  return s;

        int pos;
        vector<string> ans;
        for(int i = 0, j = 0;i < s.size() && j <= s.size(); j++){
            if(s[i] == ' ')   i++;
            else if(s[j] == ' ' || j == s.size()){
                ans.push_back(s.substr(i, j - i));
                i = j+1;
            }
        }
        reverse(ans.begin(), ans.end());
        string res;

        for(int i = 0;i < ans.size();i++){
            if(i == 0) res += ans[i];
            else res += ' ', res += ans[i];
        }

        return res;
    }
};
//leetcode submit region end(Prohibit modification and deletion)