给定一个0-1串,请找到一个尽可能长的子串,其中包含的0与1的个数相等。
Input
一个字符串,只包含01,长度不超过1000000。
Output
一行一个整数,最长的0与1的个数相等的子串的长度。
Input示例
1011
Output示例
2
下标法,在cf遇到相同的题。。。。
1 #include <iostream> 2 using namespace std; 3 #include<string.h> 4 #include<set> 5 #include<stdio.h> 6 #include<math.h> 7 #include<queue> 8 #include<map> 9 #include<algorithm> 10 #include<cstdio> 11 #include<cmath> 12 #include<cstring> 13 #include <cstdio> 14 #include <cstdlib> 15 #include<stack> 16 #include<vector> 17 const int MAX=1000000; 18 19 char a[2*MAX+10]; 20 int b[2*MAX+10]; 21 int main() 22 { 23 cin>>a+2; 24 int len=strlen(a+2); 25 int sum=0; 26 int max1=0; 27 memset(b,0,sizeof(b)); 28 b[MAX]=1; 29 for(int i=2;i<=len+1;i++) 30 { 31 if(a[i]=='1') 32 sum++; 33 else 34 sum--; 35 if(b[sum+MAX]!=0) 36 max1=max(max1,i-b[sum+MAX]); 37 else 38 b[sum+MAX]=i; 39 } 40 cout<<max1<<endl; 41 return 0; 42 }