假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“[”和“]”和花括号“{”和“ ”,且这三种括号可按任意的次序嵌套使用(如:…[…{… …[…]…]…[…]…(…)…)。编写判别给定表达式中所含括号是否正确配对出现的算法。输出结果YES 或者 NO。
5+{[2X5]+2}
YES
8-[{2+7]}
NO
和昨天做的一道poj题差不多 巩固一下
ACcode:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int stack[100],top;
int main(){
string s;
while(cin>>s){
top=0;
bool flag=true;
for(int i=0;i<s.length();++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 if(top==0){
flag=false;
break;
}
else stack[top++]=3;
}else if(s[i]==']'){
if(stack[top-1]==2)
top--;
else if(top==0){
flag=false;
break;
}else stack[top++];
}else if(s[i]==')'){
if(stack[top-1]==1)
top--;
else if(top==0){
flag=false;
break;
}else stack[top++]=1;
}
}
//cout<<top<<'\12';
//for(int i=0;i<top;++i)printf("stack[%d]=%d\n",i,stack[i]);
for(int i=0,j=top-1;i<=j;++i,--j)
if(stack[i]!=stack[j]){
flag=false;
break;
}
printf(flag?"YES\n":"NO\n");
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/zp___waj/article/details/47748357