假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“[”和“]”和花括号“{”和“ ”,且这三种括号可按任意的次序嵌套使用(如:…[…{… …[…]…]…[…]…(…)…)。编写判别给定表达式中所含括号是否正确配对出现的算法。输出结果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