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, 那么,做法跟那道题非常相似
(1)reverse the whole array
(2)reverse each subarray seperated by ' '
注意不要忘了reverse最后一个word
1 public void reverseWords(char[] s) { 2 // Three step to reverse 3 // 1, reverse the whole sentence 4 reverse(s, 0, s.length - 1); 5 // 2, reverse each word 6 int start = 0; 7 int end = -1; 8 for (int i = 0; i < s.length; i++) { 9 if (s[i] == ' ') {10 reverse(s, start, i - 1);11 start = i + 1;12 }13 }14 // 3, reverse the last word, if there is only one word this will solve the corner case15 reverse(s, start, s.length - 1);16 }17 18 public void reverse(char[] s, int start, int end) {19 while (start < end) {20 char temp = s[start];21 s[start] = s[end];22 s[end] = temp;23 start++;24 end--;25 }26 }