思路:首先就是0,1数量相同的字串,把0换成-1就是求和为0的最长字串。
可能性:1、从一个开始求和,和为0的最长字串
2、如果是中间字串为的和为0,也就是求和的过程中,有和相同的字串,下标相减,即为中间的和为0的字串长度。
def findMaxLength(nums):
"""
:type nums: List[int]
:rtype: int
"""
sums = [0] * len(nums)
dmap = {}
last = 0
res=0
for i in range(len(nums)):
last+= 2 * nums[i] - 1
sums[i] = last
if sums[i] in dmap and sums[i]!=0:
res =max(res,i+1-dmap[sums[i]])
else:
dmap[sums[i]]=i+1
if 0 in dmap:
res = max(res,dmap[0])
return res
print(findMaxLength([0,0,1,0,0,0,1,1]))