• 括号配对问题


    原题链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=2

    括号配对问题

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:3
     
    描述
    现在,有一行括号序列,请你检查这行括号是否配对。
    输入
    第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[", "]", "(", ")" 四种字符
    输出
    每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
    样例输入
    3
    [(])
    (])
    ([[]()])
    样例输出
    No
    No
    Yes
     1 #include<iostream>
     2 #include<string.h>
     3 using namespace std;
     4 
     5 char stack[10001];
     6 char s[10001];
     7 int main()
     8 {
     9     int n;
    10     cin>>n;
    11     while(n--)
    12     {
    13         int top=1,len;
    14         cin>>s;
    15         len=strlen(s);
    16         stack[top]=s[0];
    17         top++;
    18         for(int i=1;i<len;i++)
    19         {
    20             if(s[i]=='['||s[i]=='(')
    21                 stack[top++]=s[i];
    22             else
    23             {
    24                 if(stack[top-1]=='['&&s[i]==']')
    25                     top--;
    26                 else if(stack[top-1]=='('&&s[i]==')')
    27                     top--;
    28                 else 
    29                     stack[top++]=s[i];
    30             }
    31         }
    32         if(top==1)
    33             cout<<"Yes
    ";
    34         else
    35             cout<<"No
    ";
    36     }
    37     return 0;
    38 }

    思想:在表达式中,相同类型的括号(包括:()、[]、{})是成对出现的,并且当括号在表达式中嵌套时,不允许出现交叉现象。 
    检验括号匹配的方法,就是对给定的字符串依次检验:若是左括号,入栈;若是右括号,出栈一个左括号判断是否与之匹配;是其他字符,不检验。检验到字符串尾,还要检查栈是否为空。只有栈空,整个字符串才是括号匹配的。

    AC结果:

    运行结果:

  • 相关阅读:
    SQL Server 2008的备份和日志收缩
    Java邮件开发JavaMail(三)
    数据库连接字符串大全
    什么是 MDAC、 DA SDK、 ODBC、 OLEDB、 ADO、 RDS, 和 ADO / MD
    数据库连接字符串大全
    数据库连接字符串大全
    ConnectionString类 简体中文版
    数据库连接字符串大全
    ConnectionString类 简体中文版
    ConnectionString类 简体中文版
  • 原文地址:https://www.cnblogs.com/geziyu/p/9193281.html
Copyright © 2020-2023  润新知