题解 | #翻转单词序列#
翻转单词序列
http://www.nowcoder.com/practice/3194a4f4cf814f63919d0790578d51f3
思路:
-
为了省去边界条件的判断,在原字符串的尾部添加空格符,这样在遍历到尾部的时候,仍然存在一个空格,最后的结果去除掉这个空格即是所求答案。
-
首先判断这个字符串是不是一个空串或单字符的串,如果是,则翻转后还是他本身,故return str。
-
接着开始遍历非以上两种情况下的字符串,声明两个变量i和j,i用来定位下一个空格,j用来定位当前空格的下一个字符的位置;
-
找空格符,如果找到就将j与i之间的字符插入到res的前部,substr(i,num)的意思是从位置i,插入位置后续的num个元素,这里n的个数即等于j-i,执行完毕之后,将j指向i+1的位置。执行++i,继续遍历。
-
返回res.substr(0,sz),因为要去除掉末尾多出来的空格符。
class Solution {
public:string ReverseSentence(string str) {
string strb=str+' ';
string res="";
int i=0;
int j=0;
int sz=strb.size()-1;
if(str.size()==1||str==""){
return str;
}
while(i<=sz){
if(strb[i]==' '){
int num=i-j;
res=strb.substr(j,num)+' '+res;
j=i+1;
}
i++;
}
return res.substr(0,sz);
}
};