括号画家

括号画家

https://ac.nowcoder.com/acm/problem/50998

题意

有三种括号'{}','[]','()',找出最长连续匹配的括号,输出其长度。

分析

括号匹配用栈来模拟,每次将括号与栈顶元素进行匹配,然后将配对的括号出栈,并且当前连续匹配的括号长度+2,如果遇到不配对的括号了,将其入栈并且连续长度置为0,即前面连续匹配长度计算完毕,每次在进行一个max比较。

代码

#include <bits/stdc++.h>

using namespace std;

string s;
stack<char> sk;
int cnt,ans;

int main(){
    cin>>s;
    sk.push(s[0]);
    for(int i = 1; i < s.size(); i++){
        if(s[i] == ')' && sk.top() == '('){
            cnt += 2;
            sk.pop();
        }
        else if(s[i] == '}' && sk.top() == '{'){
            cnt += 2;
            sk.pop();
        }
        else if(s[i] == ']' && sk.top() == '['){
            cnt += 2;
            sk.pop();
        }
        else if(s[i] == ')' || s[i] == ']' || s[i] == '}'){
            cnt = 0;    //只有遇到右括号且与栈顶元素不配对的时候,就代表连续子序列匹配结束
            sk.push(s[i]);
        }
        else
            sk.push(s[i]);    //左括号仍有机会配对成功,直接入栈
        ans = max(ans,cnt);
    }
    cout<<ans<<endl;
    return 0;
}
全部评论
())((()))(())会发生段错误
点赞 回复 分享
发布于 2023-11-10 18:56 湖北
((({}[]((() 应输出 4 输出了 6
点赞 回复 分享
发布于 2022-08-12 22:43

相关推荐

04-11 21:31
四川大学 Java
野猪不是猪🐗:(ja)va学弟这招太狠了
点赞 评论 收藏
分享
AAA专业长城贴瓷砖刘大爷:这样的简历我会直接丢进垃圾桶,花里胡哨的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务