括号完美匹配
试题描述
()括号的匹配很好做,但是如果我们再多引入一个“[”“]”来做括号的匹配呢?为了方便判断,保证输入数据中字符串S的长度小于1000,且S不是空串,测试数据组数少于10组。数据S中只含有“[”,“]”,“(”,“)”四种字符。请使用循环和数组实现。
输入
输入包含n + 1行:
第一行是一个正整数n(0 < n < 10)表示下面有n行输入。
第二行至第n + 1行为n个字符串。每行的字符数少于999个。
输出
输出n行,为n行是否匹配的结果。如果匹配则输出“yes”,否则输出“no”(不输出引号)。
输入示例
3
[(])
(])
([[]()])
输出示例
no
no
yes
数据范围
对于100%的数据,0 < n < 10,0 < 字符串S的长度 < 999
某大佬写的,学习一下
#include <stdio.h>
#include <stdio.h>
#include <string.h>
char a[1001],b[1001];
int pd()
{
long l,i,t=-1;
l=strlen(a);
for(i=0;i<l;i++)
{
if(a[i]=='(' || a[i]=='[') b[++t]=a[i];
else if(a[i]==')')
{
if(b[t]=='(') t--;
else return 0;
}
else if(a[i]==']')
{
if(b[t]=='[') t--;
else return 0;
}
}
if(t>-1) return 0;
else return 1;
}
int main()
{
int i,n;
long l;
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
{
gets(a);
if(pd()) printf("yes\n");
else printf("no\n");
}
return 0;
}