标签:
注意题目的特殊要求:
最后结果前后不能有空格,每个单词之间的空格只能有一个。
void reverse_one_word(string &s, int begin, int end) { while(begin<end) { char temp=s[begin]; s[begin++]=s[end]; s[end--]=temp; } } void reverseWords(string &s) { int i=0; int j=0; int word=0; while(true) { while(i<s.size()&&s[i]==‘ ‘) i++; if(i==s.size()) break; if(word) s[j++]=‘ ‘; int l=j; while(i<s.size()&&s[i]!=‘ ‘) s[j++]=s[i++]; reverse_one_word(s,l,j-1); word++; } s.resize(j); reverse_one_word(s,0,j-1); }
这里使用了string类的resize函数,将s变为长度为j的字符串。
这种方法没有申请新的空间,相当于原地重新构建字符串,通过i来不断寻找下一个单词的位置。
标签:
原文地址:http://www.cnblogs.com/summerkiki/p/5443805.html