• Balanced Substring


    题解:前缀和思想(菜菜菜,我为什么这么菜,太菜 了,不能忍不能忍,菜菜菜)

    这和前缀和,你把他理解成折线图(就和股票一样),然后容易发现相等的地方就是答案(训练是画了折线图也没看出来,菜菜菜,太菜了)。然后遍历一下就行了

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=1e5+5;
    
    char a[maxn];
    int b[maxn];
    int pre[maxn];
    int vis[maxn*2+10];
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            memset(b,0,sizeof(b));
            memset(pre,0,sizeof(pre));
            memset(vis,-1,sizeof(vis));
            scanf("%s",a+1);
            int maxe=0;
    //        printf("%d ",pre[0]);
            for(int i=1;i<=n;i++){
                if(a[i]=='0') b[i]=-1;
                else b[i]=1;
                pre[i]=pre[i-1]+b[i];
    //            printf("%d ",pre[i]);
            }
    //        puts("");
            for(int i=0;i<=n;i++){
                if(vis[pre[i]+n]==-1)vis[pre[i]+n]=i;
                else maxe=max(maxe,(i-vis[pre[i]+n]));
            }
    //        for(int i=0;i<13;i++){
    //            printf("%d==%d
    ",i,vis[i]);
    //        }
    //        if(maxe<0) maxe=0;
            printf("%d
    ",maxe);
        }
        return 0;
    }
    /*
    6
    000111
    8
    11010111
    3
    111
    */
  • 相关阅读:
    第九章、查找
    opencv- python使用
    opencv初入
    初入
    第四章、数学问题
    数据结构
    分享一个SQLSERVER脚本
    详解SQL语句的集合运算
    数据库权限分配探讨
    数据库分区分表以及读写分离
  • 原文地址:https://www.cnblogs.com/lalalatianlalu/p/7725881.html
Copyright © 2020-2023  润新知