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?