
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
- Collections.reverse(list) ==> not used in the question, but quite useful when sortin array
近期评论