#include <bits/stdc++.h>
using namespace std;
map<int,int> mp;
map<int,int> ::iterator it;
int sum[1001000],lef[1001000],rig[1001000];
string str;
int main()
{
int n,i,ans;
while(cin>>str)
{
n=str.length();
str='#'+str;
sum[0]=0;
for(i=1;i<=n;i++)
{
if(str[i]=='1')
sum[i]=sum[i-1]+1;
else
sum[i]=sum[i-1]-1;
}
mp.clear();
mp[0]=0;
for(i=1;i<=n;i++)
{
if(sum[i]<0)
lef[i]=i;
else
{
it=mp.find(sum[i]+1);
if(it==mp.end())
lef[i]=-(1<<29);
else
lef[i]=i-(it->second);
}
it=mp.find(sum[i]);
if(it==mp.end())
mp[sum[i]]=i;
}
sum[n+1]=0;
for(i=n;i>=1;i--)
{
if(str[i]=='1')
sum[i]=sum[i+1]+1;
else
sum[i]=sum[i+1]-1;
}
mp.clear();
mp[0]=n+1;
for(i=n;i>=1;i--)
{
if(sum[i]>0)
rig[i]=n+1-i;
else
{
it=mp.find(sum[i]-1);
if(it==mp.end())
rig[i]=-(1<<29);
else
rig[i]=(it->second)-i;
}
it=mp.find(sum[i]);
if(it==mp.end())
mp[sum[i]]=i;
}
ans=0;
for(i=1;i<n;i++)
ans=max(ans,lef[i]+rig[i+1]);
printf("%d\n",ans);
}
}
51nod 1391 01串
最新推荐文章于 2022-01-19 16:40:54 发布