括号匹配问题
假设表达式中允许包含两种括号:圆括号和方括号。编写一个算法判断表达式中的括号是否正确配对。
输入
由括号构成的字符串,包含”(“、”)“、”[“和”]“。
输出
如果匹配输出YES,否则输出NO。
样例输入
[([][]())]
样例输出
YES
#include<stdio.h>
#include<string.h>
int main()
{
char a[100];
char b[100];
int n;
scanf("%s",a);
n=strlen(a);
int k=0;
int t=0;
for(int i=0;i<n;i++)//把输入的字符串从左到右查找,如果是左括号就储存在新的字符串中,如果是右括号则与储存的新字符串中最后一个去匹配,如果匹配则新字符串 最后一个数据删除
{
if(a[i]=='(')
{
b[k++]=a[i];
}
else if(a[i]=='[')
{
b[k++]=a[i];
}
else if(a[i]==')')
{
if(b[k-1]=='(')
{
k--;
}
else
{
t=1;
break;
}
}
else if(a[i]==']')
{
if(b[k-1]=='[')
{
k--;
}
else
{
t=1;
break;
}
}
}
if(t==1) printf("NO");
else printf("YES");
}