滑动窗口总结

模板,#########包围区域是需要改动的地方

def minWindow(self, s: str, t: str) -> str:
        need={}	#t串词频map
        window = {}	#窗口匹配map
        for c in t:
            need[c] = need.get(c, 0) + 1
        left=0      #窗口左边界
        right=0     #窗口右边界
        start=0     #记录子串起点
        minLen = sys.maxsize    #最小长度
        valid=0      #t串与s串匹配次数
        while right < len(s):
            #增大窗口
            c = s[right]	#c是要移入窗口的字符
            right += 1
            ######### 进行窗口内数据的一系列更新
            if c in need:   #该字符在t串中
                window[c] = window.get(c, 0) + 1
                if window[c] == need[c]:    #该字符匹配
                    valid +=1
            #########
            #判断是否要缩小窗口
            while valid==len(need):                
                d = s[left]		#d是要移出窗口的字符
                left += 1	#左移
                ######### 进行窗口内数据的一系列更新
                if d in need:
                    if window[d] == need[d]:
                        valid -=1
                    window[d] -= 1
                #########

        

76.最小覆盖子串 567.字符串的排列 438.找到字符串中所有字母异位词 3.无重复字符的最长子串

最后更新于