leetcode题记-557.反转字符串中的单词III

题目

给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

示例 1:

输入: “Let’s take LeetCode contest”
输出: “s’teL ekat edoCteeL tsetnoc”

来源:力扣(LeetCode)

题解

这道题以另一题作为基础,就是上一篇leetcode题记-344.反转字符串

这里要注意的就是,这是一个“双指针法”,在运行的过程中会有一个头指针固定,尾指针不断向前移动,遇到空格即为头指针和尾指针之间为一个单词,对这个单词进行反转即可。而使用的交换算法是反转字符串中最快速的异或交换法,实际上还是一个双指针法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
void reverseString(int front, int tail, string& str) {
while (front < tail) {
str[front] ^= str[tail];
str[tail] ^= str[front];
str[front++] ^= str[tail--];
}
}
string reverseWords(string s) {
int front = 0;
for (int i = 0; i < s.length(); i++) {
if (s[i] == ' ') {
reverseString(front, i - 1, s);
front = i + 1;
}
}
reverseString(front, s.length() - 1, s);
return s;
}
};

执行用时 : 16 ms, 在所有 C++ 提交中击败了98.24%的用户
内存消耗 : 11.6 MB, 在所有 C++ 提交中击败了95.48%的用户

Author: SmallXeon
Link: https://hexo.chensmallx.top/2019/09/07/leetcode-557-reverseWord/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
一些推广链接
几个便宜量大的小✈场: FASTLINK, YToo, 论坛邀请注册: ,
便宜量大但是稳定性不足的VPS: Virmach, 价格略贵但好用的VPN: , ,