假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成, 以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。
输入包括一行数据,即表达式
输出文件包括一行,即“YES” 或“NO”。
【样例输入 1】
复制2*(x+y)/(1-x)@
【样例输出 1】
复制YES
【样例输入 2】
复制(25+x)*(a*(a+b+b)@
【样例输出 2】
复制NO
_____________________________________________________________________________
日常发作业题解。?
写作不易,点个赞呗!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!?
_____________________________________________________________________________
#include <bits/stdc++.h>
using namespace std;
int n,idx=0;
string x;
char stk[100005];
void push(char x){
stk[idx++]=x;
}
int top(){
return stk[idx-1];
}
void pop(){
idx--;
}
bool empty(){
return idx==0;
}
int main(){
idx=0;
cin>>x;
bool flag=true;
for(int j=0;j<x.size()-1;j++){
if(x[j]!='('&&x[j]!=')')continue;
if(x[j]=='('){
push(x[j]);
}else if(!empty()&&(x[j]==')'&&top()=='(')){
pop();
}else{
flag=false;
break;
}
}
if(flag!=false&&empty())cout<<"YES\n";
else cout<<"NO\n";
}