186. reverse words in a string ii Method Code Point


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?

Method


  • reverse the whole sentense
  • reverse each word
  • PS: remember to reverse the last word

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Solution {
public void reverseWords(char[] s) {
//1.reverse the whole array
reverse(s, 0, s.length-1); //way to reverse array
//Collections.reverse(list); --> way to reverse list
//2.reverse each word
int start = 0;
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 one
reverse(s, start, s.length - 1);
}
private void reverse(char[] s, int start, int end){
while(start < end){
char temp = s[start];
s[start] = s[end];
s[end] = temp;
start++;
end--;
}
}
}

Point


  1. Collections.reverse(list) ==> not used in the question, but quite useful when sortin array