Description
Given an input string s, reverse the order of the words.
A word is defined as a sequence of non-space characters. The words in s will be separated by at least one space.
Return a string of the words in reverse order concatenated by a single space.
Note that s may contain leading or trailing spaces or multiple spaces between two words. The returned string should only have a single space separating the words. Do not include any extra spaces.
Example 1:
| 1
2
 | Input: s = "the sky is blue"
Output: "blue is sky the"
 | 
Example 2:
| 1
2
3
 | Input: s = "  hello world  "
Output: "world hello"
Explanation: Your reversed string should not contain leading or trailing spaces.
 | 
Example 3:
| 1
2
3
 | Input: s = "a good   example"
Output: "example good a"
Explanation: You need to reduce multiple spaces between two words to a single space in the reversed string.
 | 
Constraints:
- 1 <= s.length <= 10^4
- scontains English letters (upper-case and lower-case), digits, and spaces- ' '.
- There is at least one word in s.
Solutions
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 | class Solution {
public:
    string reverseWords(string s) {
        stack<string> word;
        string res;
        int left{0};
        int right = s.size() - 1;
        while (left <= right) {
            while (s[left] == ' ') {
                ++left;
            }
            while (s[right] == ' ') {
                --right;
            }
            while (s[left] != ' ' && left < s.size()) {
                res.push_back(s[left++]);
            }
            word.push(res);
            res.clear();
        }
        res.clear();
        while (!word.empty()) {
            res.append(word.top());
            word.pop();
            if (!word.empty())
                res.push_back(' ');
        }
        return res;
    }
};
 |