Reverse Words on sentence

Reverse the order of words in a sentence

"I love yahoo" -> "yahoo love I"

Solution: Double reverse

  public void reverse(char[] array, int left, int right) {
    while (left < right){
      char tmp = array[left];
      array[left] = array[right];
      array[right] = tmp;
      left++;
      right--;
    }
  }

  public String reverseWords(String input) {
    char[] cur = input.toCharArray();
    reverse(cur, 0, cur.length - 1);
    int start = 0;
    for (int i = 0; i < cur.length; i++){
      //start of word
      //first word, or i - 1 == ' '
      if (cur[i] != ' ' && (i == 0 || cur[i - 1] == ' ')){
        start = i;
      }
      if (cur [i] != ' ' && (i == cur.length - 1 || cur[i + 1] == ' ')){
        reverse(cur, start, i);
      }
    }
    return new String(cur);
  }

Time complexity:

Reverse = O(N)

reverseWord worse case = 'a b c d'

O(N/2 *N/2) = O(N^2)

Space Comp:

char[] cur = O(N)

Last updated

Was this helpful?