题解 P1739 【表达式括号匹配】
Coconut_Milk · · 题解
本蒟蒻也来凑一波
本题有以下几个重点:
1.左右括号匹配(意思是除了括号,其他没什么卵用)
2.结尾有一个@做结束符。当然,你也可以cin后用strlen()判断长度。
所以,现在开始讲思路:
既然左右括号要匹配,最简单的肯定是用for循环扫一遍啦!
for(int i=0;i<strlen(c);i++){
if(c[i]=='(') a++;
if(c[i]==')') b++;
}
可是,虽然它是一道水题,可是还是有些陷阱的,例如:))a+b((@
所以,我们再加入一个判断:
for(int i=0;i<strlen(c);i++){
if(c[i]==')') b++;
if(b>a){
cout<<"NO";
return 0;
}
if(c[i]=='(') a++;
}
这样,代码的主体就完成啦!我们再判断一下左右括号的数量匹不匹配:
if(a!=b) cout<<"NO";
else cout<<"YES";
好了,这样我们就(骗到满分)过了。
AC代码
#include<bits/stdc++.h>
int a,b;
char c[10005];
using namespace std;
int main(){
cin>>c;
for(int i=0;i<strlen(c);i++){
if(c[i]==')') b++;
if(b>a){
cout<<"NO";
return 0;
}
if(c[i]=='(') a++;
}
if(a!=b) cout<<"NO";
else cout<<"YES";
return 0;
}