leetcode151.翻转字符串里的单词
题目描述:给定一个字符串,逐个翻转字符串中的每个单词
示例:
输入:“the sky is blue”
输出:“blue is sky the”
再这里需要逐一的是输入的字符串可以在前面或者后面包含多余的空格,但反转后的单词间的空格只能减少到一个。
思路:在这里考虑进行两次翻转,第一次是将"the sky is blue"翻转成“eht yks si eulb”,然后再将这个字符串进行整体翻转即可成为“blue is sky the”.
首先需要将这个多余的空格去掉,然后再进行翻转。
class Solution{
public:
string reverseWords(string s){
int k=0;
for(int i=0;i<s.size();i++){
//去掉多余的空格
while(i<s.size()&&s[i]==' ') i++;
if(i==s.size())break;
int j=i;
while(j<s.size()&&s[j]!=' ') j++;
reverse(s.begin()+i,s.begin()+j);
if(k) s[k++]=' ';
while(i<j) s[k++]=s[i++];
}
s.erase(s.begin()+k,s.end());
reverse(s.begin(),s.end());
return s;
}
}