题解 | #翻转单词序列#
翻转单词序列
http://www.nowcoder.com/practice/3194a4f4cf814f63919d0790578d51f3
看到好多大佬都是两次反转实现的,也有一些提到用栈来实现,我的第一想法就是用栈:
可以明显看到翻转后的结果按照单词的顺序跟输入是相反的,可以利用栈的先入后出实现,将原来整个字符串中的每个单词入栈,然后以此出栈拼接,需要注意的就是空格的处理。
代码:
string ReverseSentence(string str) { stack<string> s; //保存每一个单词和空格 string ans = ""; //保存最后的结果 int start = 0; //每个单词的起始处 int cur = 1; //当前指针走到的地方,当遇到空格时,此指针的前一位置就是单词的结尾处 while(cur<str.length()) { if(str[cur]!=' ') cur++; //如果当前指针没有指向空格,继续往后走 else{ int len = cur-start;//当前指针指向空格,则找到一个单词,求得单词的长度 s.push(str.substr(start,len));//将这个单词入栈 s.push(" "); //重要的一步是,由于当前指针指向空格,所以需要将空格入栈 start=cur+1; //下一个单词的起始处 cur++; //当前指针也指向下一处 } } int len = cur-start; //上述循环的结束条件为cur=str.length(),故需要额外将最后一个单词入栈 s.push(str.substr(start,len)); while(!s.empty()) { ans+=s.top(); //以此出栈,拼接到最后的结果上 s.pop(); } return ans; }