一个01字符串,求出现0、1出现次数相等的最长子串长度
题目描述:
已知一个长度为N的字符串,只由0和1组成, 求一个最长的子串,要求该子串出0和1出现的次数相等。
要求算法时间复杂度尽可能的低。
比如: 10000010111000001,所求为8,加粗的部分有4个0、4个1
最简单的想法就是遍历所有的子串,之后判断该子串是否满足条件N^2子串,每个子串扫一遍判断0、1是否出现的次数相等,复杂度为O(N^3)
方法一:
稍加思考就会发现, 如果一个长度为n的子串满足条件,加么这n个元素的和加起来一定=(n/2),且
子串长度为偶数,这样在循环的过程中,增量加就可以了,不需要每个子串从头计算,复杂度降为O(N^2).
该思想的程序为fun():
int fun(char num[],int n)
{
int i,j;
int maxlen=0;//所求
int sum,currentlen;//当前子串和与当前子串长度
/