题目
算法思路
倒序 遍历字符串,用 双指针 记录每个单词的左右边界。
具体代码
class Solution {
public String reverseWords(String s) {
s = s.trim();//删除首尾空格
int j = s.length() - 1, i = j;
StringBuilder res = new StringBuilder();
//从后往前遍历字符串
while(i >= 0){
while(i >= 0 && s.charAt(i) != ' ')i--;//搜索首个空格
res.append(s.substring(i + 1, j + 1) + ' ');//向结果字符串中添加单词(substring左闭右开)
while(i >= 0 && s.charAt(i) == ' ')i--;//跳过单词间的空格
j = i;//j指向下个单词的尾字符
}
return res.toString().trim();//转化为字符串并返回
}
}
复杂度分析
- 时间复杂度: O ( n ) O(n) O(n),n 为字符串的长度。
- 空间复杂度:
O
(
n
)
O(n)
O(n),
StringBuilder
中的字符串总长度最多为 n ,占用 O ( n ) O(n) O(n) 大小的额外空间。