Balanced Substring
这道题并不难,把0变为-1,求出前缀和 num
然后如果在【l,r】区间中,如果0和1的数量一样多,那么num[ l ]==num[ r ]
不断的更新最大值!!!!
#include<bits/stdc++.h>
using namespace std;
const int MAX = 1e5 + 10;
int n,a[MAX];
map <int,int> m;
char s[MAX];
int main()
{
int n;
scanf("%d %s",&n,s + 1);
for(int i = 1; i <= n; i++)
if(s[i] == '0')
a[i] = -1;
else a[i] = 1;
int ans = 0,sum = 0;
m[0] = 1;
for(int i = 1; i <= n; i++)
{
ans += a[i];
if(m[ans])
sum = max(sum,i - m[ans] + 1);
else m[ans] = i + 1;
}
printf("%d\n",sum);
return 0;
}