题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1393
题目:
给定一个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;
}
本文介绍了一个O(n)复杂度的算法,用于找出给定0-1字符串中最长的平衡子串(即0与1数量相等的子串)。通过遍历字符串并维护一个特殊的数组来实现。
826

被折叠的 条评论
为什么被折叠?



