滑动窗口模板

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

模板

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#左移窗口
            # 进行窗口内数据的一系列更新
            #......

套模板需思考问题

  1. 当移动right扩大窗口,即加入字符时,应该更新哪些数据?
  2. 什么条件下,窗口应该暂停扩大,开始移动left缩小窗口?
  3. 当移动left缩小窗口,即移出字符时,应该更新哪些数据?
  4. 我们要的结果应该在扩大窗口时还是缩小窗口时更新?
posted @ 2024-03-11 20:47  Frommoon  阅读(11)  评论(0编辑  收藏  举报