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).