題目是這樣的:一個一維數組中只有1和-1,實現程序,求和為0的最長子串長度,並在注釋中給出時間和空間復雜度。思路就是在i從0到n,計算sum(i),sum(i)表示從0到i的元素之和。並保存在字典dic中,value是索引i,在往后的遍歷中每得到一個sum(i)就查看dic的keys是否已有此sum(i)值,如果有則用當前i位置減去保存的i,並與maxLen比較,取大的那個。遍歷結束,給出結果。時間復雜度O(n),空間復雜度O(1)。
代碼如下:
class Solution(object): def fun(self, l): dic = {0:-1} sum = 0 maxLen = 0 for x in xrange(0, len(l)): sum += l[x] if sum in dic: maxLen = max(maxLen, x - dic[sum]) else: dic[sum] = x return maxLen
