翻转字符串里的单词

151.翻转字符串里的单词

151.翻转字符串里的单词
力扣题目链接(opens new window)

给定一个字符串,逐个翻转字符串中的每个单词

示例 1:
输入: “the sky is blue”
输出: “blue is sky the”

示例 2:
输入: “ hello world! “
输出: “world! hello”
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

示例 3:
输入: “a good example”
输出: “example good a”
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个

复杂度分析:

时间复杂度 O(N)O(N)O(N) : 其中 NNN 为字符串 sss 的长度,线性遍历字符串。
空间复杂度 O(N)O(N)O(N) : 新建的 list(Python) 或 StringBuilder(Java) 中的字符串总长度 ≤N\leq N≤N ,占用 O(N)O(N)O(N) 大小的额外空间。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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) + " "); // 添加单词
while (i >= 0 && s.charAt(i) == ' ') i--; // 跳过单词间空格
j = i; // j 指向下个单词的尾字符
}
return res.toString().trim(); // 转化为字符串并返回
}
}

翻转字符串里的单词
http://example.com/2024/06/06/2_151.翻转字符串里的单词/
作者
lookofsea
发布于
2024年6月7日
许可协议