解决这题的关键在于判断括号是否成对出现.

思路:

设置2个栈,第一个栈输入字符串s中所有的括号

第二个栈用于存储第一个栈弹出的括号。

如果第二个栈的栈顶元素和第一个栈的栈顶元素为成对的括号,则将两个括号的内容都弹出,否则继续存储第一个栈的括号

如果最后第二个栈为空,则证明每一个括号都是成对出现。输出true

否则为false.

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

int main() {
    string s;
    cin>>s;
    stack<char> stk;
    for(char i:s){
        if(i == '[' || i == ']' || i== '(' || i == ')'){
            stk.push(i);
        }
    }

    unordered_map<char,char> st1;
    st1.emplace('[',']');
    st1.emplace('(',')');

    if(stk.empty()){
        cout<<"true";
    }else{
        stack<char> k;
        while (!stk.empty()){
            if(k.empty()){
                k.push(stk.top());
                stk.pop();

            }else{
                if(st1[stk.top()] == k.top()){
                    stk.pop();
                    k.pop();
                }else{
                    k.push(stk.top());
                    stk.pop();

                }
            }
            
        }
        if(k.empty()){
            cout<<"true";
        }else{
            cout<<"false";
        }

    }



}