1982 Problem B Problem E

389 篇文章 1 订阅
144 篇文章 2 订阅

问题 B: Problem E
时间限制: 1 Sec 内存限制: 32 MB
献花: 93 解决: 43
[献花][花圈][TK题库]
题目描述
请写一个程序,判断给定表达式中的括号是否匹配,表达式中的合法括号为”(“, “)”, “[“, “]“, “{“, ”}”,这三个括号可以按照任意的次序嵌套使用。
输入
有多个表达式,输入数据的第一行是表达式的数目,每个表达式占一行。
输出
对每个表达式,若其中的括号是匹配的,则输出”yes”,否则输出”no”。
样例输入
4
[(d+f)*{}]
[(2+3))
()}
[4(6]7)9
样例输出
yes
no
no
no

#define _CRT_SECURE_NO_WARNINGS
#include <unordered_map>
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <map>

using namespace std;


int main()
{
#ifdef _DEBUG
    freopen("data.txt", "r+", stdin);
#endif // _DEBUG

    int Num;
    char ch;
    string str;
    stack<char>s;

    while (cin >> Num)
    {
        getchar();
        while (Num--)
        {
            getline(cin,str);

            while (!s.empty())
                s.pop();
            size_t i  = 0;

            for (; i < str.size(); ++i)
            {
                if (str[i] == '(' || str[i] == '[' || str[i] == '{')
                {
                    s.push(str[i]);
                    continue;
                }
                if (s.size())
                {
                    ch = s.top();
                    if (str[i] == ')')
                    {
                        if (ch == '(') s.pop();
                        else break;
                    }

                    else if (str[i] == ']')
                    {
                        if (ch == '[') s.pop();
                        else break;
                    }

                    else if (str[i] == '}')
                    {
                        if (ch == '{') s.pop();
                        else break;
                    }
                }
                else if (str[i] == ')' || str[i] == ']' || str[i] == '}')
                    break;
            }

            printf("%s\n", (s.size() || i != str.size()) ? ("no") : ("yes"));

        }
    }




    return 0;
}
/**************************************************************
    Problem: 1982
    User: Sharwen
    Language: C++
    Result: 升仙
    Time:2 ms
    Memory:1716 kb
****************************************************************/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值