这个题的要求是要把单词作为一个整体,顺序翻转。之前做过另外两种问题:1.字符串按位置翻转 2.一个单词内部翻转 这个题我想的就是,先全部翻转,然后再把词再翻转一遍就OK了。
注意有几个不同的要求,字符串里有很多无意义的空格需要删除,我们先将首位的空格删除,单词间的空格边处理边删除即可。
class Solution {
public:
string reverseWords(string &s) {
if (s.length()==0) return s;
//去除前后多余空格
while (s[0]==' ') s.erase(0,1);
while (s[s.length()-1]==' ') s.erase(s.length()-1,1);
reverse(s.begin(),s.end());
int i=0;
while (i<s.length()) {
if (s[i]==' ') {
while (i+1<s.length() && s[i+1]==' ')
s.erase(i+1,1);
i++;
}else {
int j=i;
while (j+1<s.length() && s[j+1]!=' ') j++;
int tmp=j;
while (i<tmp) {
swap(s[i],s[tmp]);
i++;
tmp--;
}
i=j+1;
}
}
return s;
}
};
本文介绍了一种使用C++实现的字符串单词翻转算法,该算法首先将整个字符串翻转,然后逐个翻转每个单词,同时处理并删除多余的空格。此方法适用于需要保持单词内部顺序但改变单词间顺序的场景。
577

被折叠的 条评论
为什么被折叠?



