滑动窗口模板

Frommoon / 2024-03-12 / 原文

适用情景:字符串或数组的子串或子数组

模板

def slidingWindow(s, t):
    need = {}  # 存储字符串 t 中各个字符的需求量
    window = {}  # 存储滑动窗口中各个字符的出现次数
    for c in t:  # 遍历字符串t
        need.setdefault(c, 0)  # 访问不存在的键时自动创建并将值设置为 0
        need[c] += 1  # 统计字符串 t 中各个字符的需求量

    left = 0  # 滑动窗口的左指针
    right = 0  # 滑动窗口的右指针
    valid = 0  # 记录满足需求的字符数
    while right < len(s):
        c = s[right]#c 是将移入窗口的字符
        right += 1#右移窗口
        # 进行窗口内数据的一系列更新
        #......

        # debug 输出的位置
        # print("window: [{}, {})".format(left, right))

        # 判断左侧窗口是否要收缩
        while (window needs shrink):
            d = s[left]#d 是将移出窗口的字符
            left += 1#左移窗口
            # 进行窗口内数据的一系列更新
            #......