题解 | #翻转单词序列#

翻转单词序列

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;
    }

全部评论

相关推荐

狠赚笔第一人:学计算机自己不努力怪大环境?我大一就拿到了美团大厂的offer,好好看看自己有没有努力查看图片
点赞 评论 收藏
分享
头像
11-07 01:12
重庆大学 Java
精致的小松鼠人狠话不多:签哪了哥
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务