力扣刷题day2——最小覆盖子串

力扣刷题day2——最小覆盖子串_第1张图片

窗口滑动算法:窗口(i,j),先移动窗口j,使得窗口可以覆盖t的全部元素,然后移动窗口i,找到最小窗口。

defaultdict(int) 这里的d其实是生成了一个默认为0的带key的数据字典。你可以想象成 d[key] = int default ,d[k]所以可以直接读取 d[“m”] += 1 就是d[“m”] 就是默认值 0+1 = 1

class Solution:
    def minWindow(self, s: str, t: str) -> str:
        need=collections.defaultdict(int)
        for c in t:
            need[c]+=1
        needCnt=len(t)
        i=0
        res=(0,float('inf'))
        for j,c in enumerate(s):
            if need[c]>0:
                needCnt-=1
            need[c]-=1
            if needCnt==0:       #步骤一:滑动窗口包含了所有T元素
                while True:      #步骤二:增加i,排除多余元素
                    c=s[i] 
                    if need[c]==0:
                        break
                    need[c]+=1
                    i+=1
                if j-ilen(s) else s[res[0]:res[1]+1]    #如果res始终没被更新过,代表无满足条件的结果

你可能感兴趣的:(leetcode,职场和发展,算法)