Stack
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Solution { public String reverseWords(String s) { StringBuilder sb = new StringBuilder();
Stack<Character> stack = new Stack<>(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c == ' ') { while (!stack.isEmpty()) { sb.append(stack.pop()); } sb.append(c); } else { stack.push(c); } }
while (!stack.isEmpty()) { sb.append(stack.pop()); }
return sb.toString(); } }
|
Two Pointers
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
| class Solution { public String reverseWords(String s) { StringBuilder sb = new StringBuilder();
int i = 0; while (i < s.length()) { int startIndex = i; while (i < s.length() && s.charAt(i) != ' ') { i++; }
for (int k = i - 1; k >= startIndex; k--) { sb.append(s.charAt(k)); }
while (i < s.length() && s.charAt(i) == ' ') { sb.append(' '); i++; } }
return sb.toString(); } }
|
Two Pointers
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
| class Solution { public String reverseWords(String s) { char[] charArray = s.toCharArray();
int i = 0; while (i < charArray.length) { int startIndex = i; while (i < charArray.length && charArray[i] != ' ') { i++; }
int left = startIndex, right = i - 1; while (left < right) { swap(charArray, left++, right--); }
while (i < charArray.length && charArray[i] == ' ') { i++; } }
return new String(charArray); }
private void swap(char[] chars, int i, int j) { char tmp = chars[i]; chars[i] = chars[j]; chars[j] = tmp; } }
|
References
557. Reverse Words in a String III