Given an input string, reverse the string word by word. A word is defined as a sequence of non-space characters. The input string does not contain leading or trailing spaces and the words are always separated by a single space. For example, Given s = "the sky is blue", return "blue is sky the". Could you do it in-place without allocating extra space?
这道题要求in-place做法,不能使用extra space, 那么,做法跟Rotate Array那道题非常相似
(1)reverse the whole array
(2)reverse each subarray seperated by ' '
注意不要忘了reverse最后一个word
public void reverseWords(char[] s) {
// Three step to reverse
// 1, reverse the whole sentence
reverse(s, 0, s.length - 1);
// 2, reverse each word
int start = 0;
int end = -1;
for (int i = 0; i < s.length; i++) {
if (s[i] == ' ') {
reverse(s, start, i - 1);
start = i + 1;
}
}
// 3, reverse the last word, if there is only one word this will solve the corner case
reverse(s, start, s.length - 1);
}
public void reverse(char[] s, int start, int end) {
while (start < end) {
char temp = s[start];
s[start] = s[end];
s[end] = temp;
start++;
end--;
}
}