括号模拟

括号画家

https://ac.nowcoder.com/acm/contest/1012/A

首先在这里检讨下自己,今天实在是好堕落啊@……%……&~
判断括号是否匹配成功,肯定要用到栈这个数据结构,当我们匹配到 c 字符时,我们判断和栈顶元素是否匹配,如果匹配的话,我们就把这个栈顶元素删掉,当栈顶元素不匹配时我们让 c 字符进栈。

if(stk.size())res = max(res,i - stk.top()); //
else res = max(res , i + 1);

如果栈不为空,那么我们看这个字符到栈顶元素的距离 ,为什么不加 + 1 呢? 是因为我们在运算之前就已经删掉了栈顶元素 比如 4 5 是匹配的 ,删掉栈顶元素4 会变为2 , 5 - 3 = 2 ,为当时的答案。
在栈和队列的操作中一定要注意栈或者队列是否为空
在栈和队列的操作中一定要注意栈或者队列是否为空
在栈和队列的操作中一定要注意栈或者队列是否为空
真的好菜啊&()*……#&%!#*&

#include<bits/stdc++.h>
#define pr printf
#define sc scanf
#define fur(i,a,b) for(int i = a; i<= b ;i++)
#define fdr(i,a,b) for(int i = a; i>= b ;i--)
using namespace std;
typedef long long ll;
const int N = 100000 + 5 ;
char str[N];
int main()
{
    freopen("in.txt","r",stdin);
    scanf("%s",str);
    int n = strlen(str);
    int res = 0 ;
    stack <int> stk;
    for(int i = 0 ;i < n ; i ++)
    {
        char c = str[i] ;
        if(stk.size() && c == ']' && str[stk.top()]=='[')stk.pop();
        else if(stk.size() && c == '}' && str[stk.top()]=='{')stk.pop();
        else if(stk.size() && c == ')' && str[stk.top()]=='(')stk.pop();
        else stk.push(i);

        if(stk.size())res = max(res,i - stk.top()); //
        else res = max(res , i + 1);
    }
    printf("%d",res);
    return 0;
}
全部评论
答案输出一直是0
点赞 回复 分享
发布于 2023-11-10 18:57 湖北

相关推荐

秋招之BrianGriffin:你再跟他说华为工资也低(相对互联网)就可以享受私信爆炸了😋
点赞 评论 收藏
分享
02-12 17:30
已编辑
字节跳动_实习生(实习员工)
要怎么办呢牛:我觉得大厂日常实习最大的意义就是给自己背书,一个好公司的实习就像一个好学历似的,能够给自己增加一个标签,让别人觉得你可以。(至于真正实习干了啥,这个感觉并不太重要)。当然一家之言,仅供参考。另外,楼主已经很强了,实习毕业双双拿下,已经领先好多好多人了,羡慕啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务