P1739 题解

· · 题解

思路

括号匹配用进行实现。

遍历字符串,每遍历到 ( 就将它放入栈中。遍历到 ) 就看栈内是否有 ( 即可,如果有,那么这对括号匹配;否则无法匹配,输出 NO

最后注意判断是否所有 ( 都匹配了(即栈是否为空)。

但对于这道题来说,由于无需对括号进行操作,那么可以用一个计数器代替栈,计数器统计栈内有多少 (

AC CODE

#include<bits/stdc++.h>
using namespace std;
const int N=300;
char s[N];
int main(){
    scanf("%s",s+1);
    int n=strlen(s+1),cnt=0;
    for(int i=1;i<=n;++i)
        if(s[i]=='(')
            ++cnt;
        else if(s[i]==')'){
            if(!cnt)
                return printf("NO\n"),0;
            --cnt;
        }
    printf(cnt?"NO\n":"YES\n");
    return 0;
}