STL——括号匹配

Problem D: STL——括号匹配

Time Limit: 1 Sec  Memory Limit: 128 MB

Description

给出一堆括号,看其是否匹配,例如 ()、()()、(()) 这样的括号就匹配,)(、)()) 而这样的括号就不匹配

Input

每一行代表一组测试样例,每组测试样例只包含'('和')',样例长度不超过100个字符

Output

如果所有的括号都匹配,那么输出YES,否则输出NO

Sample Input

()

)(

Sample Output

YES

NO

HINT

使用STL的stack容易实现。

 

 
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. stack<char> bracket;
  4. int main()
  5. {
  6.  
  7.     char s[101];
  8.     while(scanf("%s",s) == 1)
  9.     {
  10.         int num;
  11.         num = strlen(s);
  12.         while( bracket.size() )
  13.             bracket.pop();
  14.         int jump = 0;
  15.         for(int i = 0; i < num; i++)
  16.         {
  17.             if(s[i] == '(')
  18.             {
  19.                 bracket.push(s[i]);
  20.             }
  21.             else if(s[i] == ')')
  22.             {
  23.                 if(bracket.empty())
  24.                 {
  25.                     cout<<"NO"<<endl;
  26.                     jump++;
  27.                     break;
  28.                     //return 0;
  29.                 }
  30.                 else
  31.                 {
  32.                     bracket.top();
  33.                     bracket.pop();
  34.                 }
  35.             }
  36.         }
  37.         if(!bracket.empty())
  38.         {
  39.             cout<<"NO"<<endl;
  40.         }
  41.         else
  42.         {
  43.             if(jump == 0)
  44.             {
  45.                 cout<<"YES"<<endl;
  46.             }
  47.  
  48.         }
  49.  
  50.     }
  51. }
  52. /*
  53. ())
  54. )()()
  55. ()
  56. ((())
  57.  */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值