标签:
给定一个0-1串,请找到一个尽可能长的连续子串,其中包含的0与1的个数相等。
组数很多,注意常数优化。。。
1011 1111 1010
2 0 4
为保证0和1的个数相等 并且最长, 可以通过和为0的方式进行处理.
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<map> using namespace std; int a[1000][1000]; int vis[2000010]; char s[1000010]; int main() { while(~scanf("%s",s)) { int len=strlen(s); int sum=0,Max=0; memset(vis,-1,sizeof(vis)); for(int i=0; i<len; ++i) { if(s[i]=='1') sum++; if(s[i]=='0') sum--; if(sum==0) { Max=max(Max,i+1); continue; } if(vis[1000000+sum]==-1) //第一次出现, 记录下标 vis[1000000+sum]=i; else // 下一次出现 { Max=max(i-vis[1000000+sum],Max); // 中间肯定是 01串 }<span id="transmark"></span> } printf("%d\n",Max); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/became_a_wolf/article/details/48129073