给定一个0-1串,请找到一个尽可能长的子串,其中包含的0与1的个数相等。
输入
一个字符串,只包含01,长度不超过1000000。
输出
一行一个整数,最长的0与1的个数相等的子串的长度。
输入样例
1011
输出样例
2
把0 当-1 处理
#include<bits/stdc++.h>
using namespace std;
string s;
int v[2000010];
int main()
{
cin>>s;
int maxn=0,sum=1e6;
memset(v,0,sizeof(v));
for(int i=0;i<s.length();i++)
{
if(s[i]=='0') sum--;
else sum++;
if(sum==1e6) maxn=i+1;//合为0,肯定最大
else if(!v[sum]) v[sum]=i+1;//记录第一个数出现的下标
else maxn=max(maxn,i+1-v[sum]);//以存在这个数,减去保存的下标即是长度
}
cout<<maxn;
return 0;
}