Featured image of post LeetCode 75 - 151. Reverse Words in a String

LeetCode 75 - 151. Reverse Words in a String

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
  • s contains 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;
    }
};