这个Java代码解决了“反转字符串中的单词顺序”的问题,具体思想如下:
1. 去除字符串首尾的空格
s.trim()
方法用于去除输入字符串s
中的前导和尾随空格。这样做是为了防止在后续步骤中多余的空格对结果产生影响。
2. 按空格分割字符串
s.split("\\s+")
这一行使用正则表达式\\s+
来分割字符串。\\s+
表示“一个或多个空格”,即使原字符串中存在多个连续的空格,这个表达式也可以将它们当作一个空格来处理。分割后的结果是一个字符串数组,每个元素都是一个单词。
3. 倒序拼接单词
StringBuilder result = new StringBuilder();
创建一个可变的字符串对象result
,用于存储反转后的结果。for (int i = words.length - 1; i >= 0; i--)
循环遍历分割出的单词数组,循环从数组最后一个单词开始,依次将单词添加到result
中,这样就实现了单词的倒序排列。result.append(" ");
仅在每个单词之间添加一个空格,确保输出中单词之间只有一个空格。为了避免最后一个单词后面多出空格,if (i > 0)
判断当前是否是最后一个单词。
4. 返回结果
- 最后使用
result.toString()
将StringBuilder
中的内容转换为字符串,并返回反转后的字符串。
主要算法思想总结:
- 字符串分割和反转:通过正则表达式分割字符串,并利用倒序循环来重组字符串,从而实现单词顺序的反转。
- 去除多余空格:
trim()
和split("\\s+")
的组合确保了字符串中的多余空格被处理好,最终输出的单词之间只留一个空格。 - 时间复杂度:该算法的时间复杂度为 O(n),其中 n 是字符串的长度,因为需要遍历字符串和数组来处理每个单词。
适用场景:
此算法能够有效处理输入字符串中的前导、尾随空格以及多个单词之间的多余空格,是一种高效且简单的解决方法。
class Solution {public String reverseWords(String s) {s = s.trim();//将两端进行处理String[] words = s.split("\\s+"); //使用正则表达式按空格分割,\\s+可以按照1或多个空格分割StringBuilder result = new StringBuilder();for(int i = words.length - 1; i >= 0; i--) {result.append(words[i]);if(i > 0) {result.append(" ");}}s = result.toString();return s;}
}