zoukankan      html  css  js  c++  java
  • 平衡的括号(栈)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83498#problem/A

    题意:输入一个包含“()”和“[]”的括号序列,判断是否合法。具体规则如下:

             1)空串合法。

             2)如果A和B都合法,则AB合法。

             3)如果A合法则(A)和[A]都合法。

             案例:

             input

                 3

                 ([])

                 (([()])))

                 ([()[]()])()

             output

                 Yes

                 No

                 Yes

    思路分析:

             1)如果长度为0,即为空串,输出Yes。

             2)如果输入第一个字符为')'或']',不可能会合法,直接输出No。

             3)进行循环判断,如果为'('或'['把它存入另一个数组中,如果为')'或']'就删除前一个'('或'['(j--),但是([)]也是错误的,所以可知如果合法,则')'或']'前面一个必为'('或'[',所以在删除前要进行判断,还有()]也是错误的,所以在判断')'或']'前,要先判断j是否为0。若为0,跳出循环。

                 如果循环正常运行结束并且那另一个数组都删除完了(j==0),就输出Yes,否则输出No。

    源代码如下:

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 using namespace std;
     5 int main()
     6 {
     7     char s[130],x[130];
     8     int n,j,i;
     9     cin>>n;
    10     getchar();
    11     while(n--)
    12     {   
    13         j=0;
    14         gets(s);
    15         if(strlen(s)==0)          //判断是否为空串
    16         {
    17             cout<<"Yes"<<endl;
    18             continue;
    19         }
    20         if(s[0]==')'||s[0]==']')         
    21         {
    22             cout<<"No"<<endl;
    23             continue;
    24         }
    25         for(i=0;i<strlen(s);i++)
    26         {   
    27             if(s[i]=='('||s[i]=='[')
    28                 x[j++]=s[i];
    29             else
    30             {
    31             
    32                 if(j==0)       
    33                     break;
    34                 if(s[i]==')')
    35                 {
    36                     if(x[j-1]=='(')        
    37                         j--;             //删除“(”
    38                     else
    39                         break;
    40                 }
    41                 if(s[i]==']')
    42                 {
    43                     if(x[j-1]=='[')
    44                         j--;            //删除“[”
    45                     else
    46                         break;
    47                 }
    48             }
    49         }
    50             if(j==0&&i==strlen(s))
    51                 cout<<"Yes"<<endl;
    52             else
    53                 cout<<"No"<<endl;
    54     }
    55     return 0;
  • 相关阅读:
    第二个spring,第一天
    第二个spring
    项目总结以及团队贡献分
    四则运算第三次冲刺(项目完成)
    四则运算第二次冲刺更新进度(补更)
    四则运算第二次冲刺更新进度
    四则运算第一次冲刺
    阅读《构建之法》13-17章
    四则运算 用户调之修改篇
    队伍评论
  • 原文地址:https://www.cnblogs.com/q-c-y/p/4667587.html
Copyright © 2011-2022 走看看