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();
for (int j = s.length() - 1; j >= 0; j--) { if (s.charAt(j) != ' ') { if (sb.length() != 0) { sb.append(" "); }
int i = j; while (i >= 0 && s.charAt(i) != ' ') { i--; }
sb.append(s, i + 1, j + 1); j = i; } }
return sb.toString(); } }
|
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 33 34 35 36 37 38 39 40 41 42 43 44
| class Solution { public String reverseWords(String s) { char[] chars = s.toCharArray(); reverse(chars, 0, chars.length - 1);
int writeIndex = 0; for (int i = 0; i < chars.length; i++) { if (chars[i] != ' ') { if (writeIndex != 0) { chars[writeIndex++] = ' '; }
int j = i; while (j < chars.length && chars[j] != ' ') { j++; }
reverse(chars, i, j - 1); for (int k = i; k < j; k++) { chars[writeIndex++] = chars[k]; }
i = j; } }
return new String(chars, 0, writeIndex); }
private void reverse(char[] chars, int i, int j) { while (i < j) { swap(chars, i++, j--); } }
private void swap(char[] chars, int i, int j) { char tmp = chars[i]; chars[i] = chars[j]; chars[j] = tmp; } }
|
References
151. Reverse Words in a String
剑指 Offer 58 - I. 翻转单词顺序