更新 0151.翻转字符串里的单词的CPP更简洁的版本2。

用LC27的原理使得更为简洁。
This commit is contained in:
Epoch
2022-02-21 14:37:15 +08:00
committed by GitHub
parent f0800ec607
commit ceaaa2fd2d

View File

@ -222,7 +222,42 @@ public:
效率:
<img src='https://code-thinking.cdn.bcebos.com/pics/151_翻转字符串里的单词.png' width=600> </img></div>
```CPP
//版本二:
class Solution {
public:
void reverseWord(string& s,int start,int end){ //这个函数Carl哥的要更清晰。
for(int i=start;i<(end-start)/2+start;++i){
swap(s[i],s[end-1-i+start]);
}
}
void trim(string& s){//去除所有空格并在相邻单词之间添加空格
int slow = 0;
for(int i=0;i<s.size();++i){
if(s[i]!=' '){ //不懂这个删除操作可以做一下这个题。Leetcode: 27. 移除元素https://leetcode-cn.com/problems/remove-element/
if(slow != 0) s[slow++] = ' ';//单词之间添加空格。
while(i<s.size() && s[i] != ' ' ){
s[slow++] = s[i++];
}
}
}
s.resize(slow);
}
string reverseWords(string s) {
trim(s);
reverse(s.begin(),s.end());
int start = 0;
for(int i=0;i<=s.size();++i){
if(i == s.size() || s[i] == ' ' ){ //找到每个单词首尾
reverseWord(s,start,i);
start = i+1;
}
}
return s;
}
};
```
## 其他语言版本