题意:
给一个01串寻找一个最长字串,这个字串中的0和1数量相等
思路:
将0变成-1,求前缀和,两个位置前缀和大小相等,说明这之间的01数量相等
注意!第0位的前缀和位0
#include<iostream>
#include<map>
using namespace std;
int sum[100010];
char s[100010];
map<int,int>q;
int main(){
int n,ans=0;
cin>>n>>s+1;
for(int i=1;i<=n;i++){
if(s[i]=='0')sum[i]=sum[i-1]-1;
else sum[i]=sum[i-1]+1;
if(q[sum[i]]==0&&sum[i]!=0){
q[sum[i]]=i;
}
else{
ans=max(ans,i-q[sum[i]]);
// cout<<q[sum[i]]<<" "<<i<<endl;
}
}
// cout<<sum[1]<<" "<<sum[8]<<endl;
cout<<ans<<endl;
}