L186. 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?

Solution:

public void reverseWords(char[] s) {
    if(s == null) return;
    // reverse whole sentence
    reverse(s, 0, s.length - 1);
    // reverse word
    int start = 0;
    for(int i = 0; i < s.length; i++){
        if(s[i] == ' '){
            reverse(s, start, i -1);
            start = i + 1;
        }
    }
    // reverse the last word, if where is only one word, this gonna solve the corner case
    reverse(s, start,s.length - 1);
}
public void reverse(char[] s, int start, int end){
    if(s == null || start >= end) return;
    while(start < end){
        char temp = s[start];
        s[start] = s[end];
        s[end] = temp;
        start++;
        end--;
    }
}

Last updated

Was this helpful?