最长01串
Time Limit: 2666ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给定一个0-1串,请找到一个尽可能长的连续子串,其中包含的0与1的个数相等。
组数很多,注意常数优化。。。
输入
一个字符串,只包含
01
,长度不超过
1000000
输出
一行一个整数,最长的
0
与
1
的个数相等的子串的长度。
示例输入
1011 1111 1010
示例输出
2 0 4
提示
来源
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);
}
}