557. Reverse Words in a String III 发表于 2022-01-26 Stack123456789101112131415161718192021222324class 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 Pointers12345678910111213141516171819202122232425class 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++; } // 跳出时 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 Pointers123456789101112131415161718192021222324252627282930class 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; }} Reference557. Reverse Words in a String III