51nod 1393 0和1相等串

给定一个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 }
View Code

 

posted @ 2017-12-03 18:03  小小超plus  阅读(175)  评论(0编辑  收藏  举报