• P1944 最长括号匹配_NOI导刊2009提高(1)


    P1944 最长括号匹配_NOI导刊2009提高

    题解

    宁愿相信世上有鬼,也不能随便相信某谷题目标签

    我想了半天然后看了眼题解,发现用栈来模拟就好了

    栈来模拟,还要用到一个bool数组,标记是否已经匹配 use[ i ]

    一串括号,入栈,遇到匹配的就弹出去,标记已经匹配,然后最后挑连续匹配的最大的就好了,因为题目要求子串

    注意两个点:

    1.q[top]数组存的是括号的标号,而不是top是存的括号标号

    2.res记录暂时一共有多少个连续的匹配括号数,所以每遇到一个新的括号,都要更新一遍

    具体可以结合代码

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    #include<string>
    #include<cstring>
    #include<queue>
    
    using namespace std;
    
    typedef long long ll;
    
    inline int read()
    {
        int ans=0;
        char last=' ',ch=getchar();
        while(ch<'0'||ch>'9') last=ch,ch=getchar();
        while(ch>='0'&&ch<='9') ans=ans*10+ch-'0',ch=getchar();
        if(last=='-') ans=-ans;
        return ans;
    }
    
    const int maxn=1e6+10;
    char s[maxn];
    bool use[maxn];
    int top=0,q[maxn];
    int l,r,ans=0,res=0,l1=0,r1=0;
    
    int main()
    {
        scanf("%s",s+1);
        int len=strlen(s+1);        
        memset(use,0,sizeof(use));
        for(int i=1;i<=len;i++){
            if((s[q[top]]=='('&&s[i]==')')||(s[q[top]]=='['&&s[i]==']')){
                use[q[top--]]=1;
                use[i]=1;
            }
            else{
                q[++top]=i;
            }
        }
        for(int i=1;i<=len;i++){
            if(!use[i]){
                if(res>ans) ans=res,l=l1,r=r1;
                res=0;   //不可以放到if里面
            }
            else{
                if(res==0) l1=r1=i;
                else r1++;
                res++;    //不可以放到if里面
            }
        }
        if(res>ans) ans=res,res=0,l=l1,r=r1;
        for(int i=l;i<=r;i++) printf("%c",s[i]);
        return 0;
    }

    一开始自己Hank自己然后就被自己 Hank si 了

    1.())[]())[]

    2.())[]([(][()]]()

  • 相关阅读:
    MySQL表的各种类型
    MySQL的慢查询使用与分析
    推荐一款Windows下的桌面倒数日软件
    C语言 复习指南
    C语言函数指针、回调函数
    VSCode环境配置 for C and C++
    JAVA编程基础&面试题
    MarkDown支持的十六进制颜色列表
    短路运算符、位运算总结
    Let's Encrypt的HTTPS证书在阿里云OSS内部署
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/11922409.html
Copyright © 2020-2023  润新知