Reverse words in a sentence (I love Yahoo!)

Assumption: String is not null. no duplicate space.

Approach: Step1: reverse the whole string

                 Step2: reverse every single words
public class Solution {
  public String reverseWords(String input) {
    // Write your solution here.
    if (input == null) {
      return "";
    }
    char[] data = input.toCharArray();
    reverse(data, 0, data.length - 1);
    int start = 0;
    for (int i = 0; i < data.length; i++) {
      if (data[i] != ' ' && (i == 0 || data[i - 1] == ' ')) {     //find the beginning of a word
        start = i;
      }
      if (data[i] != ' ' && (i == data.length - 1 || data[i + 1] == ' ')) { //find the end of a word
        reverse(data, start, i);
      }
    }
    return new String(data);
  }

  private void reverse(char[] data, int left, int right) {
    while (left <= right) {
      char temp = data[left];
      data[left] = data[right];
      data[right] = temp;
      left++;
      right--;
    }
  }
}


//i love yahoo, two steps reverse. step one: reverse whole sentence;
//                                  step two: reverse every single words.

Time: O(n).

results matching ""

    No results matching ""