mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-06 23:28:29 +08:00
Update
This commit is contained in:
@ -4,8 +4,26 @@ https://leetcode-cn.com/problems/reverse-words-in-a-string/
|
||||
|
||||
## 思路
|
||||
|
||||
这道题目可以说是综合考察了字符串的多种操作。
|
||||
|
||||
那么问题来了,要不要使用split 和 reverse 等等库函数
|
||||
|
||||
这道题目中很多同学使用库函数走捷径解题,其实这也无可厚非,如果这样做,一定要确保自己可以实现这些库函数的功能,别看 split 好像很简单,其实很多时候自己去实现的时候错漏百出的。
|
||||
|
||||
解题思路:
|
||||
|
||||
* 移除多余空格
|
||||
* 将整个字符串反转
|
||||
* 将每个单词反转
|
||||
|
||||
这样我们就完成了翻转字符串里的单词。
|
||||
|
||||
## 代码
|
||||
|
||||
效率:
|
||||
|
||||
<img src='../pics/151_翻转字符串里的单词.png' width=600> </img></div>
|
||||
|
||||
```
|
||||
class Solution {
|
||||
public:
|
||||
@ -61,24 +79,24 @@ public:
|
||||
string reverseWords(string s) {
|
||||
removeExtraSpaces(s); // 去掉冗余空格
|
||||
reverse(s, 0, s.size() - 1); // 将字符串全部反转
|
||||
int start = 0;
|
||||
int end = 0;
|
||||
bool entry = false;
|
||||
int start = 0; // 反转的单词在字符串里起始位置
|
||||
int end = 0; // 反转的单词在字符串里终止位置
|
||||
bool entry = false; // 标记枚举字符串的过程中是否已经进入了单词区间
|
||||
for (int i = 0; i < s.size(); i++) { // 开始反转单词
|
||||
if ((!entry) || (s[i] != ' ' && s[i - 1] == ' ')) {
|
||||
start = i; // 确定单词起始位置
|
||||
entry = true;
|
||||
entry = true; // 进入单词区间
|
||||
}
|
||||
// 单词后面有空格的情况,空格就是分词符
|
||||
if (entry && s[i] == ' ' && s[i - 1] != ' ') {
|
||||
end = i - 1; // 确定单词终止位置
|
||||
entry = false;
|
||||
entry = false; // 结束单词区间
|
||||
reverse(s, start, end);
|
||||
}
|
||||
// 最后一个结尾单词之后没有空格的情况
|
||||
if (entry && (i == (s.size() - 1)) && s[i] != ' ' ) {
|
||||
end = i;// 确定单词终止位置
|
||||
entry = false;
|
||||
entry = false; // 结束单词区间
|
||||
reverse(s, start, end);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user