Description
假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“[”和“]”和花括号“{”和“ ”,且这三种括号可按任意的次序嵌套使用(如:…[…{… …[…]…]…[…]…(…)…)。编写判别给定表达式中所含括号是否正确配对出现的算法。输出结果YES 或者 NO。
Input
5+{[2X5]+2}
Output
YES
Sample Input
8-[{2+7]}
Sample Output
NO
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
const int maxn = 1000001;
using namespace std;
int main()
{
int n,i,j,m;
char a[maxn];
char b[maxn];
gets(a);
n=strlen(a);
j=0;
for(i=0; i<n; i++)
{
if(a[i]=='(')
b[j++]=1;
if(a[i]=='[')
b[j++]=2;
if(a[i]=='{')
b[j++]=3;
if(a[i]==')')
b[j++]=6;
if(a[i]==']')
b[j++]=5;
if(a[i]=='}')
b[j++]=4;
}
int flag;
m=strlen(b);
for(i=0; i<m; i++)
{
if(b[i]+b[m-1-i]==7)
flag=0;
if(b[i]+b[m-1-i]!=7)
{
flag=1;
break;
}
}
if(flag==0)
printf("YES\n");
if(flag==1)
printf("NO\n");
return 0;
}