题目描述
解题
start来找每个单词;
end和idx在start找到单词后,开始重新摆放顺序,s[idx]是最后的结果;
单词之间的空格也由idx来控制;
class Solution {
public:
string reverseWords(string s) {
//整个反转
reverse(s.begin(),s.end());
int n = s.size();
int idx = 0;//这里设置一个索引idx
//循环是每个单词循环一次,
//怎么做到的:s[start]和s[end]之间组成一个单词,每次循环末尾把start值置成end就行了
for(int start = 0; start < n ; start++)
{
if(s[start] != ' ')
{
int end = start;//等于说两个标记的,start到end是一个单词
//索引idx,作用是单词与单词之间的空格,if使得第一个不会空格,之后每次循环都会有空格
//这样还保证了开头没有空格;
if(idx != 0)
s[idx++] = ' ';
//这边是一个单词,end到空正好一个单词结束
while(end < n && s[end]!= ' ')
s[idx++] = s[end++];
//反转这个单词
reverse(s.begin() + idx - (end - start), s.begin() + idx);
start = end;
}
}
//把后面多余部分都删除
s.erase(s.begin()+idx, s.end());
return s;
}
};