作者在 2012-03-29 21:37:47 发布以下内容
描述现在,有一行括号序列,请你检查这行括号是否配对。输入第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No样例输入3
[(])
(])
([[]()])样例输出No
No
Yes
#include <stdio.h>
#include <string.h>
int main()
{
int n;
scanf("%d%*c",&n); //输入测试组数
while(n--)
{
char a[10001],b[10001]; //把数据输入a数组,b数组作为一个栈存在
gets(a);
int len=strlen(a),j,i=1;
if(a[0]==')'||a[0]==']'||len%2) //如果第一个数据是)或是]或者数组长度是奇数
{
printf("No\n"); //表示不能配对,输出No
continue;
}
b[j=0]=a[0];
for(;i<len-1;i++)
{
if(b[j]==a[i]-2||b[j]==a[i]-1)//如果一个符号能被下一个符号配对,那么把下下一个元素压入b
{
if(j==0)
b[j]=a[++i];
else
j--;
}
else //如果一个符号不能被下一个符号配对,把这个符号压入b的数组中
b[++j]=a[i];
}
if(b[j]==a[i]-2||b[j]==a[i]-1&&j==0)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
#include <string.h>
int main()
{
int n;
scanf("%d%*c",&n); //输入测试组数
while(n--)
{
char a[10001],b[10001]; //把数据输入a数组,b数组作为一个栈存在
gets(a);
int len=strlen(a),j,i=1;
if(a[0]==')'||a[0]==']'||len%2) //如果第一个数据是)或是]或者数组长度是奇数
{
printf("No\n"); //表示不能配对,输出No
continue;
}
b[j=0]=a[0];
for(;i<len-1;i++)
{
if(b[j]==a[i]-2||b[j]==a[i]-1)//如果一个符号能被下一个符号配对,那么把下下一个元素压入b
{
if(j==0)
b[j]=a[++i];
else
j--;
}
else //如果一个符号不能被下一个符号配对,把这个符号压入b的数组中
b[++j]=a[i];
}
if(b[j]==a[i]-2||b[j]==a[i]-1&&j==0)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}