题目描述
假设一个表达式有英文字母(小写)、运算符(+
、-
、*
、/
)和左右小(圆)括号构成,以 @
作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则输出 YES
;否则输出 NO
。表达式长度小于 255255,左圆括号少于 2020 个。
输入格式
一行:表达式。
输出格式
一行:YES
或 NO
。
输入输出样例
输入 #1复制
2*(x+y)/(1-x)@
输出 #1复制
YES
输入 #2复制
(25+x)*(a*(a+b+b)@
输出 #2复制
NO
说明/提示
表达式长度小于 255,左圆括号少于 20 个。
思路
这类题方法:直接统计,用标记统计
如果不正确,那不正确的部分为
①“(”
②“)”
③“)(”
①②可以直接统计,但③不行,所以:
这道题方法:直接统计,用标记统计
标记,这道题用“)”,因为左右括号是一对对出现的
代码
#include<bits/stdc++.h>
using namespace std;
int js;
int main()
{
//加快输出输入
std::ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
char ch;
while(cin>>ch) //输入
{
if(ch=='@')
{
break;
}
else if(ch=='(')
{
js++;
}
else if(ch==')')//②③在这里不通过
{
if(js==0)
{
cout<<"NO";
return 0;
}
js--;
}
}
if(js!=0)//①在这里不通过
{
cout<<"NO";
}
else
{
cout<<"YES";
}
return 0;
}