题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=2
括号配对问题
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
3
-
描述
- 现在,有一行括号序列,请你检查这行括号是否配对。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
char a[10001]= {0},b[10001]={0};
scanf("%s",a);
int l=strlen(a);
if(l%2==1)//如果字符串的长度为奇数,那么字符串一定不配对,可以直接输出No;
{
printf("No\n");
continue;
}
while(1)
{
int t=0;
l=strlen(a);
for(int i=0; i<l; i++)
{
if((a[i]=='['&&a[i+1]==']')||(a[i]=='('&&a[i+1]==')'))//判断括号是否配对,如果括号配对,直接跳过这一对括号;
i++;
else//将不配对的括号赋给数组b;
{
b[t]=a[i];
t++;
}
}
if(strcmp(a,b)==0)//如果数组a等于数组b,那么a数组中不存在配对的数组,直接输出No;
{
printf("No\n");
break;
}
for(int j=0;j<l;j++)//清空a数组,因为数组a一定比数组b长,会影响下面将b数组赋给a数组;
a[j]='\0';
strcpy(a,b);//将b数组赋给a数组;
for(int j=0;j<t;j++)//清空b数组,因为下一个循环中的b数组会比这个短,会影响下一个循环中的b数组;
b[j]='\0';
if(t==0)
{
printf("Yes\n");
break;
}
}
}
return 0;
}
ps:不要问我为什么会有影响,我也不知道,找BUG的时候发现的,然而我也不知道原因(如果你们知道的话,就跟我说一声,Orz)。