186. Reverse Words in a String II

Problem:

Given an input string , reverse the string word by word. 

Example:

Input:  ["t","h","e"," ","s","k","y"," ","i","s"," ","b","l","u","e"]
Output: ["b","l","u","e"," ","i","s"," ","s","k","y"," ","t","h","e"]

Note: 

  • A word is defined as a sequence of non-space characters.
  • The input string does not contain leading or trailing spaces.
  • The words are always separated by a single space.

Follow up: Could you do it in-place without allocating extra space?

Solutions:

class Solution {
public:
    void reverseWords(vector<char>& s) {
        int start = 0;
        int end = 0;

        while (start < s.size()) {
            end = start + 1;
            while (end < s.size() && s[end] != ' ') ++end;
            reverse(s, start, end - 1);
            start = end + 1;
        }


        reverse(s, 0, s.size() - 1);
    }

    void reverse(vector<char>& s, int start, int end) {
        while (start < end) {
            swap(s[start], s[end]);
            ++start;
            --end;
        }
    }
};

results matching ""

    No results matching ""