YTU 2238: 括号匹配(栈和队列)

来源:互联网 发布:网络贷款 报警有用吗 编辑:程序博客网 时间:2024/05/29 16:13

2238: 括号匹配(栈和队列)

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 42  Solved: 28
[Submit][Status][Web Board]

Description

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

Input

5+{[2X5]+2}

Output

YES

Sample Input

8-[{2+7]}

Sample Output

NO

HINT

Source

和昨天做的一道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;}


0 0
原创粉丝点击