题目:
方法:
首先考虑如何计算具有相同数量的0和1,可以通过将0转换为-1,若长度n的元素之和为0,则说明n个元素中的0与1的个数相等。若前n个元素之和等于前n+j个元素之和,则n到n+j个元素中的0与1个数相等。
可以通过2*nums[i] -1的方法,将nums中的0转换为1。
接下来创建一个dict,键值为元素累加求和,value为最后一个累加元素的角标
遍历的同时,当前元素与dict中键值相同元素(前n项和相同元素)的最大差值,也就是当出现也就是0,1个数相等子串的最长长度。
最后返回最大的长度值。
有一点需要说明就是dict1中初始设置{0:-1},是因为list的下标从0开始,故前0个元素的和为0,下标为-1。
class Solution: def findMaxLength(self, nums): """ :type nums: List[int] :rtype: int """ dmap = {0 : -1} res = total = 0 for i, n in enumerate(nums): total += 2 * nums[i] - 1 if total in dmap: res = max(res, i - dmap[total]) else: dmap[total] = i return res