1. 题目描述
题目链接:557. 反转字符串中的单词 III
2. 解题思路
此题也可以直接在原字符串上进行操作,避免额外的空间开销。
当找到一个单词的时候,我们交换字符串第一个字符与倒数第一个字符,随后交换第二个字符与倒数第二个字符……如此反复,就可以在原空间上翻转单词。
我们让 i
指向起始位置,当 i
不为空格时,就往后挪动,遇到空格就停下来,此时 i
指向空格
此时我们交换反转第一个单词 Let's
的顺序
此时 i
还是指向空格的,所以我们需要再把 i
往后移动,让它指向下一个单词
这样,我们就完成了对一个单词的反转,我们用个 while
循环完成对整个句子里面单词的反转,而循环结束的条件就是 i < s.length()
3. 代码实现
代码示例
class Solution {
public:
string reverseWords(string s) {
int len = s.length();
int i = 0;
while (i < len) {
int start = i;
// 1.找到第一个单词,遇到空格就停止
while (i < len && s[i] != ' ') {
i++;
}
// 2.反转单词的顺序
int left = start;
int right = i - 1;
while (left < right) {
swap(s[left], s[right]);
left++;
right--;
}
// 3.此时i还是指向空格的,所以继续让i++,指向下一个单词
while (i < len && s[i] == ' ') {
i++;
}
}
return s;
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/80833.html