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?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| public class Solution { public void reverseWords(char[] s) { if (s == null || s.length == 0) return; reverse(s, 0, s.length - 1); for (int i = 0, start = 0; i <= s.length; i++) { if (i == s.length || s[i] == ' ') { reverse(s, start, i - 1); start = i + 1; } } } public void reverse(char[] s, int start, int end) { if (s == null || s.length < 2 || start >= end) return; while (start < end) { char temp = s[start]; s[start] = s[end]; s[end] = temp; start++; end--; } } }
|