剑指offer-44. 翻转单词顺序列

题目描述

牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?

解题思路:

1、从后往前遍历字符串,遇到字母存入栈中
2、遇到空格从栈中取元素放入目标字符串
3、遍历完整个字符串后,此时栈中存放的是第一个单词
4、最后从栈中取出该单词存入目标字符串

代码实现:

#include <stack>
#include<string>
class Solution {
    /*
    解题思路:
    1、从后往前遍历字符串,遇到字母存入栈中
    2、遇到空格从栈中取元素放入目标字符串
    3、遍历完整个字符串后,此时栈中存放的是第一个单词
    4、最后从栈中取出该单词存入目标字符串
    
    */
    
public:
    string ReverseSentence(string str) {
        string s = "";
        stack<char> stk;
        for(int i=str.size()-1;i>=0;i--){
            char c = str[i];
            if(c!=' '){
                stk.push(c);
            }else{
                while(!stk.empty()){
                    s = s + stk.top();
                    stk.pop();
                }
               s= s + ' ';
            }
        }
        //第一个单词的翻转
         while(!stk.empty()){
             s = s + stk.top();
             stk.pop();
        }
        return s;
    }
};

 效率:

发布了89 篇原创文章 · 获赞 0 · 访问量 921

猜你喜欢

转载自blog.csdn.net/qq_34449717/article/details/104138407