51nod 1393 0和1相等串
2016-06-29 20:18
260 查看
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1393
题目:
给定一个0-1串,请找到一个尽可能长的子串,其中包含的0与1的个数相等。
Input
Output
Input示例
Output示例
有个O(n)算法。
#include <iostream>
#include<bits/stdc++.h>
#define N 1100000
using namespace std;
int v[2*N];
char s[2*N];
int main()
{
scanf("%s",s);
int len=strlen(s);
int sum=N,ans=0;
for(int i=0;i<len;i++)
{
sum+=(s[i]=='0'?-1:1);
if(sum==N) ans=i+1;
else if(!v[sum]) v[sum]=i+1;
else ans=max(ans,i+1-v[sum]);
}
cout<<ans<<endl;
}
题目:
给定一个0-1串,请找到一个尽可能长的子串,其中包含的0与1的个数相等。
Input
一个字符串,只包含01,长度不超过1000000。
Output
一行一个整数,最长的0与1的个数相等的子串的长度。
Input示例
1011
Output示例
2
有个O(n)算法。
#include <iostream>
#include<bits/stdc++.h>
#define N 1100000
using namespace std;
int v[2*N];
char s[2*N];
int main()
{
scanf("%s",s);
int len=strlen(s);
int sum=N,ans=0;
for(int i=0;i<len;i++)
{
sum+=(s[i]=='0'?-1:1);
if(sum==N) ans=i+1;
else if(!v[sum]) v[sum]=i+1;
else ans=max(ans,i+1-v[sum]);
}
cout<<ans<<endl;
}