滑动窗口

作者: 愿你我皆是黑马 | 来源:发表于2021-07-23 23:56 被阅读0次

滑动窗口用途

  • 用于解决连续子串连续子数组问题

模式说明

  • 用两个指针,标识窗口边界
  • 用一些状态变量标识窗口当前状态
  • 窗口长度可以固定,也可以可变,取决于具体问题
  • 窗口有左边扩大缩小,右边扩大缩小,和整体左右移动几种移动形式

一般步骤

  1. 判断是整体移动类型,还是左右移动类型
  2. 如何表示当前窗口状态(如:窗口长度,最大一般设为0,最小一般设为超过总长度的值)
  3. 有多少种临界状态,临界状态如何移动窗口

力扣题目举例


  • 3. 无重复字符的最长子串:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

    步骤一: 判断是整体移动类型,还是左右移动类型

    • 很明显该题目不是固定长度的,所以选择 左右移动类型。

    步骤二如何表示当前窗口状态

    • 窗口中子串是否重复的状态,这里使用map,不使用字符串的index等方法
    • 窗口中子串长度

    步骤三有多少种临界状态,临界状态如何移动窗口

    • 当窗口没有重复字符,右边窗口向右扩展
    • 当窗口有重复字符,左边窗口向右扩展

    编码

     def 无重复字符的最长子串(目标字符串):
       # 边界情况 略
       # 定义 左右移动类型 窗口指针
       窗口左边下标=0
       窗口右边下标=0
       # 定义窗口状态变量
       当前存在字符字典=Map()
       当前窗口长度=0
       # 循环判断窗口状态,并且做出相应处理
       最大长度=0
       for 一个字符 in 目标字符串: 
         if  当前存在字符字典[一个字符]==None:
           # 右边窗口右移动
           窗口右边下标+=1
           # 加入字典
           当前存在字符字典[一个字符]=True
           # 长度加1
           当前窗口长度+=1
           最大长度=当前窗口长度
         else:
           # 左边窗口右移动
           窗口左边下标+=1
           # 移除字典
           当前存在字符字典[一个字符]=None
           # 长度减1
           当前窗口长度-=1
       return 最大长度
    

  • 30. 串联所有单词的子串:给定一个字符串 s 和一些 长度相同 的单词 words 。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。

    注意子串要与 words 中的单词完全匹配,中间不能有其他字符 ,但不需要考虑 words 中单词串联的顺序。
    步骤一: 判断是整体移动类型,还是左右移动类型
    1. 该提意可知,整体移动类型(长度为words 中的单词)

    步骤二如何表示当前窗口状态
    1. 所有words的中长度
    2. 一个word的长度
    3. 当前word的所有单词,及单词重复出现的次数:Map
    步骤三有多少种临界状态,临界状态如何移动窗口
    1. 从0移动到目标字符串长度-所有words的中长度的范围,判断移动到index时,index到所有words的中长度 的字符是否满足,当前word的所有单词的Map
    2. 不满足则整体移动窗口,调整index的位置,知道满足为止
    编码






相关文章

  • Algorithm进阶计划 -- 滑动窗口

    滑动窗口算法滑动窗口框架滑动窗口运用 1. 滑动窗口框架 滑动窗口算法,核心思路是维护一个窗口,不断滑动,然后更新...

  • TCP可靠传输理论;流量控制;拥塞控制

    滑动窗口、超时重传、选择确认SACK 滑动窗口 滑动窗口:发送窗口、接收窗口。发送窗口内的数据都可以发送,在收到新...

  • 3. 无重复字符的最长子串

    主要用到了滑动窗口算法两个指针之间就代表是一个滑动窗口,滑动窗口必须保证没有重复元素,同时保留最大的滑动窗口的大小...

  • Flutter-BottomSheet(底部滑动窗口)

    BottomSheet(底部滑动窗口) ModalBottomSheet(对话框式底部滑动窗口) BottomSh...

  • 无重复字符最长字串

    滑动窗口

  • (3)FlinkSQL滑动窗口demo演示

    滑动窗口(Sliding Windows)与滚动窗口类似,滑动窗口的大小也是固定的。区别在于,窗口之间并不是首尾相...

  • 滑动窗口

    406. 和大于S的最小子数组 描述给定一个由 n 个正整数组成的数组和一个正整数 s ,请找出该数组中满足其和 ...

  • 滑动窗口

    最长无重复字母子串 leetcode438

  • 滑动窗口

    介绍将TCP与UDP这样的简单传输协议区分开来的是它传输数据的质量。TCP对于发送数据进行跟踪,这种数据管理需要协...

  • 滑动窗口

    有一个整型数组 arr ,和一个大小为 w 的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。返回一个长度...

网友评论

    本文标题:滑动窗口

    本文链接:https://www.haomeiwen.com/subject/gsbpmltx.html