题解 | #翻转单词序列#
翻转单词序列
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;
}