栈的知识点:P1739 表达式括号匹配——洛谷(题解)

题目描述

假设一个表达式有英文字母(小写)、运算符(+-*/)和左右小(圆)括号构成,以 @ 作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则输出 YES;否则输出 NO。表达式长度小于 255255,左圆括号少于 2020 个。

输入格式

一行:表达式。

输出格式

一行:YES 或 NO

输入输出样例

输入 #1复制

2*(x+y)/(1-x)@

输出 #1复制

YES

输入 #2复制

(25+x)*(a*(a+b+b)@

输出 #2复制

NO

说明/提示

表达式长度小于 255255,左圆括号少于 2020 个。

代码:

#include
using namespace std;
stack q;
string a;
int main(){
    cin>>a;
    for(int i=0;i         if(a[i]=='(') q.push(a[i]);
        else if(a[i]==')') {
            if(!q.empty()&&q.top()=='(') q.pop();
            else q.push(a[i]);
        }
    }
    if(!q.empty()) cout<<"NO";
    else cout<<"YES";
}

就是看括号能不能全部匹配,能就消掉,不能就放栈里,最后看栈是不是空的。

栈知识点:

头文件:#include

定义:stack<数据类型> +变量名;

操作:top()、push()、pop()、size()、empty()……

栈就像一个水杯,先进后出,只能从顶端取出。

你可能感兴趣的:(算法)