///////////////////////////////////////////////////////////////////////////////////////////////////////
作者: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");
}
}
版权声明:本文为博主原创文章,允许非商业性转载,转载必须著名作者(CSDN tt2767)与本博客链接:http://blog.csdn.net/tt2767。
原文地址:http://blog.csdn.net/tt2767/article/details/47046455