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?
Have you met this question in a real interview?
思路:跟rotate array一个思路,就是先reverse所有的char,然后根据每个空格去reverse每个word,注意最后循环出来之后,还要reverse一次,因为最后一个单词还是要reverse的。这个跟merge interval很类似。
public class Solution {
public void reverseWords(char[] s) {
if(s == null || s.length == 0) return;
reverse(s, 0, s.length-1);
int start = 0; int end = 0;
while(end < s.length){
while(end<s.length && s[end] != ' '){
end++;
}
reverse(s, start, end-1);
start = end+1;
end++;
}
reverse(s, start, end-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--;
}
}
}