mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 00:22:55 +08:00
更新 0151.翻转字符串里的单词的CPP更简洁的版本2。
用LC27的原理使得更为简洁。
This commit is contained in:
@ -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;
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
## 其他语言版本
|
||||
|
||||
|
Reference in New Issue
Block a user