zoukankan      html  css  js  c++  java
  • 括号配对问题学习

    问题:

    描述
       现在,有一行括号序列,请你检查这行括号是否配对。
    输入
       第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[", "]", "(", ")" 四种字符。
    输出
      每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
    参考代码:
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <stack>
    
    using namespace std;
    
    int main()
    {
        int N;
        cin >>N;
        while (N --)
        {
            stack <char> stackChar;
            string A;
            bool judgeBrack=true;
            cin >>A;
    
            for (int i=0; i<A.size(); ++i)
            {
                if (A[i] == '[' || A[i] == '(') // 如果新放入的数据是[,(都进栈
                {
                    stackChar.push(A[i]);//入栈
                }
                else
                {
                    if(stackChar.empty())//????????????????????????
                    {
                        judgeBrack = false;
                        break;//空输入,结束不判断
                    }
                    if ((A[i] == ']' && stackChar.top() == '[')
                        ||(A[i] == ')' && stackChar.top() == '('))
                            stackChar.pop();//输入的括号与栈里面的相匹配,把栈里的出栈
                    else//其他情况为违法情况,跳出
                    {
                        judgeBrack = false;
                        break;
                    }
                }
            }
    
            //PS: 最后的判断中,如果stack里面还有字符也说明,是不匹配的 stackChar.size()
            (!judgeBrack || stackChar.size())? cout <<"No" <<endl: cout<< "Yes" <<endl;
        }
        return 0;
    }

    思路:

    1) 用while循环输入所需要判断几个字符串符合

    stack<char>stackChar//定义一个字符串的栈

    bool judgeBrack=true//不合法时,为false

    2)用for循环依次取得字符串a[i]

    1.如果是‘(’‘【’‘{’合法,入栈stackChar.push(a[i])

    2.如果是空,则返回judgeBrack为false

    3.如果遇到 ']' or ')'判断stack.top()是否与其配对

    4.其他情况都违法

    3)该字符串循环完毕之后,判断栈是否为空以及judgeBrack。二者有一为真,则不匹配

  • 相关阅读:
    使用EF取数据库返回的数据
    关注博客分类
    Natas23 Writeup(php弱类型)
    Natas22 Writeup(header重定向、burp截取抓包)
    Natas21 Writeup(共用session、session注入)
    Natas20 Writeup(Session登录,注入参数)
    Natas19 Writeup(Session登录,常见编码,暴力破解)
    Natas18 Writeup(Session登录,暴力破解)
    Natas17 Writeup(sql盲注之时间盲注)
    Natas15 Writeup(sql盲注之布尔盲注)
  • 原文地址:https://www.cnblogs.com/zyqx/p/9170369.html
Copyright © 2011-2022 走看看