题目描述
假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“[”和“]”和花括号“{”和“ ”,且这三种括号可按任意的次序嵌套使用(如:…[…{… …[…]…]…[…]…(…)…)。编写判别给定表达式中所含括号是否正确配对出现的算法。输出结果YES 或者 NO。
输入
5+{[2X5]+2}
输出
YES
样例输入
8-[{2+7]}
样例输出
NO
很简单的一道题,注意一下只要不符合要求直接输出no即可。只判断(){}【】
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
int stack[100],top;
int main()
{
string s;
while(cin>>s)
{
int i;
top=0;
int flag=1;
for(i=0;i<s.size();i++)
{
if(s[i]=='{')
{
stack[top++]=3;
}
else
if(s[i]=='[')
{
stack[top++]=2;
}
else
if(s[i]=='(')
{
stack[top++]=1;
}
else
if(s[i]=='}')
{
if(stack[top-1]==3)
top--;
else
{
flag=0;
break;
}
}
else
if(s[i]==']')
{
if(stack[top-1]==2)
top--;
else
{
flag=0;
break;
}
}
else
if(s[i]==')')
{
if(stack[top-1]==1)
top--;
else
{
flag=0;
break;
}
}
}
if(flag)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}