Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue",
return "blue is sky the".
思路:每次遇到空格把每个单词反转,然后把整个字符串反转。
边界条件注意:开始的多个空格跳过,结尾的多个空格删掉。单词中间间隔的多个空格变成一个。
建议实现,就是把处理空格的字符串从字符串开始重写,然后反转单词。
然后把字符串resize(),删掉多余的内容。
class Solution {
public:
void reverse(string &s, int i, int j){
while(i<j){
char t=s[i];
s[i++]=s[j];
s[j--]=t;
}
}
void reverseWords(string &s) {
int i=0, j=0;
int l=0;
int len=s.length();
int wordcount=0;
while(true){
while(i<len && s[i] == ' ') i++; // 跳过前面空格
if(i==len) break;
if(wordcount) s[j++]=' '; //除了了第一个以外,其他情况后一位变空格
l=j;
while(i<len && s[i] != ' ') {s[j]=s[i]; j++; i++;} //拷贝覆盖
reverse(s,l,j-1); // 反转每个单词
wordcount++;
}
s.resize(j); // resize result string
reverse(s,0,j-1); // reverse whole string
}
};
本文介绍了一种字符串处理算法,该算法能够将输入字符串中的单词逐个翻转,并最终将整个字符串翻转,以实现单词顺序的倒置。例如,对于输入“theskyisblue”,输出结果为“blueisskythe”。文章详细解释了算法步骤,包括如何处理空格、调整单词间距离等细节。
486

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



