P1739 表达式括号匹配(洛谷题面

题目

题目描述:

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

输入格式:

一行:表达式。

输出格式:

一行:YESNO

数据范围与说明:

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

输入输出样例 #1

输入:

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

输出:

1
YES

输入输出样例 #2

输入:

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

输出:

1
NO

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<bits/stdc++.h>
using namespace std;
string s;
stack <int> stk;
int main(){
int i=0;
getline(cin,s);
while(s[i]!='@')
{
if(stk.empty()){
if(s[i]==')'){
cout<<"NO";
return 0;
}
}
if(s[i]=='('){
stk.push(s[i]);
}
if(s[i]==')'){
stk.pop();
}
i++;
}
if(stk.empty()){
cout<<"YES";
}else {
cout<<"NO";
}
return 0;
}