186. Reverse-Words-in-a-String-II

difficulty: Medium

section pre{ background-color: #eee; border: 1px solid #ddd; padding:10px; border-radius: 5px; }

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?

Method One

class Solution {
    private char[] chars;
    public void reverseWords(char[] s) {
        this.chars = s;
        reverse(0, s.length - 1);
        int left = 0;
        for(int i = 0; i < chars.length; i++ ) {
            if( chars[i] == ' ') {
                reverse(left, i - 1);
                left = i + 1;
            }
        }
        reverse(left, chars.length - 1);
    }
    public void reverse(int start , int end) {
        while(start < end ) {
            swap(start++, end--);
        }
    }
    public void swap(int i , int j) {
        char temp = chars[i];
        chars[i] = chars[j];
        chars[j] = temp;
    }
}

Last updated

Was this helpful?