题解 P1739 【表达式括号匹配】

· · 题解

本蒟蒻也来凑一波

本题有以下几个重点:

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;
}