表达式括号匹配

链接

这题会输入一段表达式,要求我们判断括号能不能匹配

比如2+(23-1*7))

这个肯定是不匹配的,我们所需要做的就是判断这些括号能不能对应上

因此,我们不必在意其他无关变量

我们可以设置一个计数器,当我们遇到左括号时,计数器加一,遇到右括号但计数器为0时,说明

此刻的右括号多了(可能整体相等但此时多了,就像")("这样)

那直接就返回NO了

如果最后计数器不等于0,说明左右括号数量不相等,那也是NO

#include<bits/stdc++.h>
using namespace std;
int main(){
    string str;
    cin>>str;
    int m=str.size();
    int ok=0;
    for(int i=0;i<m;i++){
        if(str[i]=='('){
            ok++;
        }
        else if(str[i]==')'&&ok!=0){
          ok--;
        }
        else if(str[i]==')'&&ok==0){
            ok=1000;
            break;
        }
    }
    if(ok==0){
        cout<<"YES"<<endl;
    }
    else{
        cout<<"NO"<<endl;
    }
}

时间复杂度:O(n)

空间复杂度:O(n)

全部评论

相关推荐

10-22 12:03
山东大学 Java
程序员小白条:26届一般都得有实习,项目可以随便写的,如果不是开源社区的项目,随便包装,技术栈也是一样,所以本质应该找学历厂,多投投央国企和银行,技术要求稍微低一点的,或者国企控股那种,纯互联网一般都得要干活
应届生简历当中,HR最关...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务