我的Bilibili频道:香芋派Taro
我的个人博客:taropie0224.github.io(阅读体验更佳)
我的公众号:香芋派的烘焙坊
我的音频技术交流群:1136403177
我的个人微信:JazzyTaroPie

https://leetcode-cn.com/problems/reverse-words-in-a-string-iii/

题解

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
class Solution
{
public:
string reverseWords(string s)
{
int n = s.length();
int start = 0; //每个单词的起始位置
int i2;
int length; //单词的长度
for (int i = 0; i < n; i++)
{
if (s[i] == ' ' || i == n - 1)
{
i2 = i != n - 1 ? i : i + 1;
length = i2 - start; //单词的长度
//遍历一半的单词长度
for (int count = 0; count < length / 2; count++)
{
swap(s[start++], s[(i2--) - 1]);
}
start = i + 1; //更新下一个单词的起始位置
}
}
return s;
}
};

思路

原地反转,空间复杂度O(1)

如果遍历到空格,则交换空格前的最近的单词,注意最后一个单词的情况(后面没有空格了,但是也要反转)

交换的次数为单词的长度除以2