zoukankan      html  css  js  c++  java
  • 1355:字符串匹配问题(strs)

    【题目描述】

    字符串中只含有括号 (),[],<>,{},判断输入的字符串中括号是否匹配。如果括号有互相包含的形式,从内到外必须是<>,(),[],{},例如。输入: [()] 输出:YES,而输入([]),([)]都应该输出NO

    【输入】

    第一行为一个整数nn,表示以下有多少个由括好组成的字符串。接下来的nn行,每行都是一个由括号组成的长度不超过255255的字符串。

    【输出】

    在输出文件中有nn行,每行都是YESNO

    【输入样例】

    5
    {}{}<><>()()[][]
    {{}}{{}}<<>><<>>(())(())[[]][[]]
    {{}}{{}}<<>><<>>(())(())[[]][[]]
    {<>}{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]
    ><}{{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]

    【输出样例】

    YES
    YES
    YES
    YES
    NO

    #include <iostream>
    using namespace std;
    
    const int N = 255;
    char a[N] = {0};
    
    int main()
    {
        int n;
        cin >> n;
        char ch = cin.get();//return char
        //cout<<n<<":"<<ch<<endl;
        for (int i = 0; i < n; i++) {
            int jian, xiao, zhong, da, top, cnt;
            for (ch = jian = xiao = zhong = da = top = cnt = 0;
                 ch != '@' && cnt < N; cnt++) {//从内到外必须是<>,(),[],{}
                //cin>>ch;//none space
                ch = cin.get();
                //cout<<ch;
                switch (ch) {
                    case '<':
                        a[top++] = ch;
                        jian++;
                        break;
                    case '>':
                        jian--; //尖括号
                        if (a[--top] != '<') {
                            //cout<<">:"<<a[top]<<endl;
                            cin >> a; //remove a line
                            ch = cin.get();//return char
                            ch = '@';
                        }
                        break;
                    case '(':
                        a[top++] = ch;
                        xiao++;
                        break;
                    case ')':
                        xiao--; //小括号
                        if (a[--top] != '(' || jian != 0) {
                            //cout<<"):"<<a[top]<<endl;
                            cin >> a; //remove a line
                            ch = cin.get();//return char
                            ch = '@';
                        }
                        break;
                    case '[':
                        a[top++] = ch;
                        zhong++;
                        break;
                    case ']':
                        zhong--; //中括号
                        if (a[--top] != '[' || jian != 0 || xiao != 0) {
                            //cout<<"]:"<<a[top]<<endl;
                            cin >> a; //remove a line
                            ch = cin.get();//return char
                            ch = '@';
                        }
                        break;
                    case '{':
                        a[top++] = ch;
                        da++;
                        break;
                    case '}':
                        da--; //大括号
                        if (a[--top] != '{' || jian != 0 || xiao != 0 || zhong != 0) {
                            //cout<<"}:"<<a[top]<<endl;
                            cin >> a; //remove a line
                            ch = cin.get();//return char
                            ch = '@';
                        }
                        break;
                    case '@':
                    default:
                        //cout<<"@:"<<ch<<endl;
                        ch = '@';
                        break;
                }
            }
            //cout<<i<<":"<<ch<<endl;
            if (jian == 0 && xiao == 0 && zhong == 0 && da == 0) {
                cout << "YES" << endl;
            } else {
                cout << "NO" << endl;
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    [HNOI2008]神奇的国度(最大势算法)
    学习笔记——prufer序列
    [NOIP模拟题]chess(最短路计数)
    2019暑假图论总结
    [NOIP2016]天天爱跑步(桶)
    [NOIP2012]疫情控制(贪心)
    [NOIP2016]蚯蚓(单调性乱搞)
    暑假考试题4:星际旅行(欧拉路)
    暑假考试题3:jigsaw 黄金拼图(乱搞)
    暑假考试题3:baritone 上低音号与星星(链表+矩形统计)
  • 原文地址:https://www.cnblogs.com/gaojs/p/15584375.html
Copyright © 2011-2022 走看看