内存:128  时间:1

题目描述

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

输入

5+{[2X5]+2}

输出

YES

样例输入

8-[{2+7]}

样例输出

NO

提示

代码如下

#include <iostream>
#include <stack>
#include <string.h>
using namespace std;
int main()
{
    stack <char>st;
    char a[10001];
    cin>>a;
    int n=strlen(a);
    for(int i=0; i<n; i++)
    {
        if(a[i]=='{'||a[i]=='['||a[i]=='('||a[i]==']'||a[i]=='}'||a[i]==')')
        {
            if(a[i]==']'||a[i]=='}'||a[i]==')')
            {
                cout<<"NO";
                return 0;
            }
            st.push(a[i]);
            break;
        }
    }
    char x,y;
    for(int i=0; i<n; i++)
    {
        if(a[i]=='{'||a[i]=='['||a[i]=='('||a[i]==']'||a[i]=='}'||a[i]==')')
        {
            y=a[i];
            x=st.top();
            if(y=='{'||y=='['||y=='(')
            {
                st.push(y);
                continue;
            }
            else if((x=='('&&y==')')||(x=='{'&&y=='}')||(x=='['&&y==']'))
            {
                st.pop();
                continue;
            }
            else if((x=='('&&y!=')')||(x=='{'&&y!='}')||(x=='['&&y!=']'))
            {
                cout<<"NO";
                return 0;
            }
        }
    }
    cout<<"YES";
    return 0;
}


代码来源于互联网,仅供参考!