186. Reverse Words in a String II

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

For example,
Given s = "the sky is blue",
return "blue is sky the".

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

Solution:整体reverse + every words reverse

思路: 和http://www.jianshu.com/p/5e74b3826441相同,只不过输入的是char[]型,可以修改,则不需要新建result数组, No extra space
Time Complexity: O(N) Space Complexity: O(1)

Solution Code:

public class Solution {
    public void reverseWords(char[] s) {
        // 1, reverse the whole sentence
        reverse(s, 0, s.length - 1);
        
        // 2, reverse each word
        int start = 0;
        for (int i = 0; i < s.length; i++) {
            if (s[i] == ' ') {
                reverse(s, start, i - 1);
                start = i + 1;
            }
        }
        
        // 3, Corner Case: reverse the last word
        reverse(s, start, s.length - 1);
    }

    public void reverse(char[] s, int i, int j) {
        while (i < j) {
            char t = a[i];
            a[i++] = a[j];
            a[j--] = t;
        }
    }
}

你可能感兴趣的:(186. Reverse Words in a String II)