• 括号配对问题学习


    问题:

    描述
       现在,有一行括号序列,请你检查这行括号是否配对。
    输入
       第一行输入一个数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。二者有一为真,则不匹配

  • 相关阅读:
    铁大电梯调度需求分析
    结对开发2
    四则运算3
    团队开发——冲刺2.d
    团队开发——冲刺2.c
    团队开发——冲刺2.b
    团队开发——冲刺2.a
    团队开发——冲刺1.g
    团队开发——冲刺1.f
    团队开发——冲刺1.e
  • 原文地址:https://www.cnblogs.com/zyqx/p/9170369.html
Copyright © 2020-2023  润新知