zoukankan      html  css  js  c++  java
  • 最长连续01字符串

    个人心得:思维比较混乱,已经慢慢找到了一特点就是这子字符串满足1,0数目相等,所将0用-1代替,则此时

    sum【l-1】=sum【r】,然后想到这里还是要用俩重循环,还会超时,后面看了题解,他是用min,max数组记录相等

    sum的位置,只要存在相等的sum然后循环一次取最大的差值就好了,真的是感觉自己做题做得太少了,暑假还是

    不怎么上心,希望以后能改改吧。

    给定一个0-1串,请找到一个尽可能长的子串,其中包含的0与1的个数相等。

    Input

    一个字符串,只包含01,长度不超过1000000。

    Output

    一行一个整数,最长的0与1的个数相等的子串的长度。

    Sample Input

    1011

    Sample Output

    2
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 const int p=1000000;
     7 char s[1000005];
     8 int sum[1000005];
     9 int mina[5000005],maxa[5000005];
    10 int main(){
    11    scanf("%s",s+1);
    12    int le=strlen(s+1);
    13    memset(mina,-1,sizeof(mina));
    14    memset(maxa,-1,sizeof(maxa));
    15    if(s[1]=='1') sum[1]=1;
    16    else sum[1]=-1;
    17    for(int i=2;i<=le;i++)
    18       if(s[i]=='1') sum[i]=sum[i-1]+1;
    19    else sum[i]=sum[i-1]-1;
    20    for(int i=0;i<=le;i++)
    21    {
    22        int x=sum[i];
    23        if(mina[x+p]==-1) mina[x+p]=i;
    24    }
    25     for(int i=le;i>=0;i--)
    26     {
    27         int x=sum[i];
    28        if(maxa[x+p]==-1) maxa[x+p]=i;
    29     }
    30     int ans=0;
    31     for(int i=0;i<=le+p;i++)
    32     if(mina[i]!=-1)
    33       ans=max(ans,maxa[i]-mina[i]);
    34         cout<<ans<<endl;
    35   return 0;
    36 }


  • 相关阅读:
    ArcGis面要素空间连接,取相交面积最大者 C#
    迅雷下载器无限制版_无敏感_无限速
    redhat 6.8 配置 centos6 163 的 yum 源
    apache cgi 程序: End of script output before headers
    centos php 安装 decrypt
    url传输中+转为%2B取到变空格的问题
    快速搭建自己的搜索引擎
    ffmpeg 文件推流 rtsp和rtmp
    svn 服务器操作
    edusoho迁移
  • 原文地址:https://www.cnblogs.com/blvt/p/7410100.html
Copyright © 2011-2022 走看看