最长01串

来源:互联网 发布:成为算法工程师 编辑:程序博客网 时间:2024/05/17 02:55

最长01串

Time Limit: 2666ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

给定一个0-1串,请找到一个尽可能长的连续子串,其中包含的01的个数相等。
组数很多,注意常数优化。。。

输入

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

输出

 一行一个整数,最长的01的个数相等的子串的长度。

示例输入

101111111010

示例输出

204

提示

 

来源

 scf0920

示例程序

 
#include<iostream>  #include<cstdio>  #include<cstring>  #include<cstdlib>  #include<algorithm>  #include<map>    using namespace std;    int a[1000][1000];  int vis[2000010];  char s[1000010];  int main()  {      while(~scanf("%s",s))      {          int len=strlen(s);          int sum=0,Max=0;          memset(vis,-1,sizeof(vis));          for(int i=0; i<len; ++i)          {              if(s[i]=='1')                  sum++;              if(s[i]=='0')                  sum--;              if(sum==0)              {                  Max=max(Max,i+1);                      continue;              }              if(vis[1000000+sum]==-1)                    vis[1000000+sum]=i;              else                                                               {                  Max=max(i-vis[1000000+sum],Max);               }          }          printf("%d\n",Max);      }  }  

0 0
原创粉丝点击