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 30 31 32
| class Solution { public void reverseWords(char[] s) { int left = 0, right = s.length - 1; reverse(s, left, right); for (left = 0; left < s.length; left++) { if (s[left] == ' ') { continue; } right = left; while (right < s.length && s[right] != ' ') { right += 1; } right -= 1; reverse(s, left, right); left = right; } }
private void reverse(char[] s, int left, int right) { while (left < right) { swap(s, left, right); left += 1; right -= 1; } }
private void swap(char[] s, int i, int j) { char temp = s[i]; s[i] = s[j]; s[j] = temp; } }
|
先把整个string reverse, 再把每个word给reverse.
时间复杂度: O(n)
空间复杂度: O(1)