Вот алгоритм O (n),
l=[1,1,1,1,0,1,0,1,1,0,1,0,0,0,1,1,1,1,0]
m=[0,0,0,0,1,0,1,1,1,0,0,0,1,1,1,0,0,0,1]
delta=[]
for i in range(0,len(l)):
delta.append(l[i]-m[i])
leftsum=[0]
for i in range(1,len(l)+1):
leftsum.append(leftsum[i-1]+delta[i-1])
sumHash=[-1]*len(l)
maxLen=0;
leftIndex=-1
rightIndex=-1
for i in range(0,len(l)+1):
if sumHash[leftsum[i]]!=-1:
if maxLen<i-sumHash[leftsum[i]]:
maxLen=i-sumHash[leftsum[i]]
leftIndex=sumHash[leftsum[i]]
rightIndex=i-1
else:
sumHash[leftsum[i]]=i
print 'len=',maxLen,'left=',leftIndex,'right=',rightIndex