题目来源:https://cn.vjudge.net/problem/UVA-673
题目大意:
每个“(”或“[”是否有对应的“)”或“]”与之相匹配。
解题思路:
用栈。如果遇到“(”或“[”,则压入栈,如果遇到“)”或“]”,则与栈顶元素进行匹配,配对成功则将栈顶元素弹出栈,不成功no,最后栈中元素为零yes,不为零no。
AC代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 140
int bal(char *p);
int main()
{
int n, r;
char s[N];
scanf("%d",&n);
getchar();
for (r=0;r<n;r++)
{
gets(s);
if (bal(s))
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
return 0;
}
int bal(char *p)
{
int i, len, j;
char z[N];
len = strlen(p);
for (i=0,j=0;i<len;i++)
{
if (p[i]=='(' || p[i]=='[')
{
z[j] = p[i];
j++;
}
else
{
if ((p[i]==')' && z[j-1]=='(') || (p[i]==']' && z[j-1]=='['))
{
z[j-1] = '\0';
j--;
}
else
{
return 0;
}
}
}
if (!j)
{
return 1;
}
else
{
return 0;
}
}