题解 | 吐泡泡

吐泡泡

https://www.nowcoder.com/practice/f86fa2221c094b3d8d1fc79bae450d96

题干解读:输入T组字符串,每组输入一个字符串,遵从一下规则:每两个o合成一个O,每两个O消失,要求输出最后的结果.

思路:

使用栈来对每个输入的字符进行匹配,每两个o则合成一个O,每两个O则弹出栈顶元素;

特别要注意的是,合成O时要注意栈顶元素弹出后的栈顶元素是否为O,如果是则要消去.

#include <iostream>
#include<stack>
#include<unordered_map>
using namespace std;

int main() {
    int t;
    cin>>t;
    unordered_map<char,char> m1;
    unordered_map<char,char> m2;
    m1.emplace('o','o');
    m2.emplace('O','O');
    while(t--){
        string s;
        cin>>s;
        stack<char> stk;
        for(char i:s){
            if(stk.empty()){
                stk.push(i);
            }else{
                if(m1[stk.top()] == i){
                    stk.pop();
                    if(stk.empty()){
                        stk.push('O');
                    }else{
                        if(m2[stk.top()] == 'O'){
                            stk.pop();
                        }
                    }
                }else if(m2[stk.top()] == i){
                    stk.pop();
                }else{
                    stk.push(i);
                }

            }
        }
        stack<char> ans;
        while(!stk.empty()){
            ans.push(stk.top());
            stk.pop();
        }
        while(!ans.empty()){
            cout<<ans.top();
            ans.pop();
        }
        cout<<endl;
    }

}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务