uva673_平衡的括号(网上写的好麻烦。。)

来源:互联网 发布:猎天使魔女 知乎 编辑:程序博客网 时间:2024/04/28 02:38

///////////////////////////////////////////////////////////////////////////////////////////////////////
作者:tt2767
声明:本文遵循以下协议自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0
查看本文更新与讨论请点击:http://blog.csdn.net/tt2767
链接被删请百度: CSDN tt2767
///////////////////////////////////////////////////////////////////////////////////////////////////////


这就是个水题,本质上就是判断括号顺序,只要考虑下列几种错误的情况:

1.)( 或】【
2.(【) 或【(】
3.((() 或 【】】】】或()))或【【【【【】

简单来说,保持个数平衡,括号对称,没有夹杂的就好了

#include<cstdio>#include<iostream>#include<cstring>int main(){    int n;    scanf("%d",&n);    getchar();    while(n--)    {        char s[200];        gets(s);        int x,y;        bool flag = true;        x=y=0;        for(int i = 0 ; i < strlen(s) ; i++)        {            if(s[i] == '(' && x>=0 && s[i+1] != ']')                x++;            else if(s[i] == ')' && x >0)                x--;            else if(s[i] == '[' && y >= 0 && s[i+1] != ')')                y++;            else if(s[i] == ']' && y > 0)                y--;            else            {                flag = false;                break;            }        }        if(flag && !x && !y)            puts("Yes");        else            puts("No");    }}
0 0