leetcode链接:
https://leetcode.cn/problems/reverse-words-in-a-string/

方案一
先将String根据空格切分开,切分之后的String放到List数组中,反向遍历数组,实现反转。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class Solution { public String reverseWords(String s) {
List<String> resultTemp = new ArrayList<>(); for (String s1 : s.split(" ")) { if (s1 != null && !"".equals(s1)) { resultTemp.add(s1); } }
StringBuilder result = new StringBuilder();
for (int i = (resultTemp.size() - 1); i > 0; i--) { result.append(resultTemp.get(i)); result.append(' '); } result.append(resultTemp.get(0)); return result.toString(); } }
|
结果
解答成功:
执行耗时:5 ms,击败了72.09% 的Java用户
内存消耗:42.4 MB,击败了8.73% 的Java用户
官方方案 – 自行编写对应的函数
https://leetcode.cn/problems/reverse-words-in-a-string/solution/fan-zhuan-zi-fu-chuan-li-de-dan-ci-by-leetcode-sol/
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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| class Solution { public String reverseWords(String s) { StringBuilder sb = trimSpaces(s);
reverse(sb, 0, sb.length() - 1);
reverseEachWord(sb);
return sb.toString(); }
public StringBuilder trimSpaces(String s) { int left = 0, right = s.length() - 1; while (left <= right && s.charAt(left) == ' ') { ++left; }
while (left <= right && s.charAt(right) == ' ') { --right; }
StringBuilder sb = new StringBuilder(); while (left <= right) { char c = s.charAt(left);
if (c != ' ') { sb.append(c); } else if (sb.charAt(sb.length() - 1) != ' ') { sb.append(c); }
++left; } return sb; }
public void reverse(StringBuilder sb, int left, int right) { while (left < right) { char tmp = sb.charAt(left); sb.setCharAt(left++, sb.charAt(right)); sb.setCharAt(right--, tmp); } }
public void reverseEachWord(StringBuilder sb) { int n = sb.length(); int start = 0, end = 0;
while (start < n) { while (end < n && sb.charAt(end) != ' ') { ++end; } reverse(sb, start, end - 1); start = end + 1; ++end; } } }
作者:LeetCode-Solution 链接:https: 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
|
官方方案 – 双端队列
https://leetcode.cn/problems/reverse-words-in-a-string/solution/fan-zhuan-zi-fu-chuan-li-de-dan-ci-by-leetcode-sol/
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
| class Solution { public String reverseWords(String s) { int left = 0, right = s.length() - 1; while (left <= right && s.charAt(left) == ' ') { ++left; }
while (left <= right && s.charAt(right) == ' ') { --right; }
Deque<String> d = new ArrayDeque<String>(); StringBuilder word = new StringBuilder(); while (left <= right) { char c = s.charAt(left); if ((word.length() != 0) && (c == ' ')) { d.offerFirst(word.toString()); word.setLength(0); } else if (c != ' ') { word.append(c); } ++left; } d.offerFirst(word.toString());
return String.join(" ", d); } }
作者:LeetCode-Solution 链接:https: 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
|