Problem E

经典的括号匹配问题。

遇到匹配的括号则出栈,否则匹配失败退出循环,最后若没有匹配失败的情况且栈为空输出yes,否则输出no。

map<char,char> mp;

int main()
{
    mp['(']=')';
    mp['[']=']';
    mp['{']='}';

    int T;
    cin>>T;
    while(T--)
    {
        stack<char> stk;
        string s;
        cin>>s;

        bool ok=true;
        for(int i=0;i<s.size();i++)
            if(s[i] == '(' || s[i] == '[' || s[i] == '{')
                stk.push(s[i]);
            else if(s[i] == ')' || s[i] == ']' || s[i] == '}')
            {
                if(stk.size() && mp[stk.top()] == s[i])
                    stk.pop();
                else
                {
                    ok=false;
                    break;
                }
            }

        if(!ok || !stk.empty()) puts("no");
        else puts("yes");
    }
    //system("pause");
    return 0;
}
原文地址:https://www.cnblogs.com/fxh0707/p/14430594.html