最简单理解滑动窗口
文章目录
引用labuladong的一个关于滑动窗口的口诀 「滑动窗口老猛男,子串问题全靠它。左右指针滑窗口,一前一后齐头进。」
先看一段代码
|
|
这段代码是干什么的呢?
这段代码其实就是一个leecode的「给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度」题,使用滑动窗口来解答的代码实现
也就是labuladong口诀中子串问题全靠它的具体体现。
左右指针滑窗口,一前一后齐头进 怎么理解
也就是代码中注释写的
- 定义了一个窗口`LinkedList
- 往这个List右侧add元素(也就是右指针滑动),一直添加元素到满足题目中(不含有重复字符)的临界点(也就是添加到元素已经在链表中出现过)
- 这时候需要收缩左侧指针
l.removeFirst();
,注意这时候每次实际只移除了一个元素 一前一后齐头进
就是add一个,如果列表中有重复数据就会移除一个,也就是后进一步前跟进一步(右侧add,左侧remove),此时List内部对象是存在重复对象,但List整体长度是曾经出现过的 不含有重复字符的 最长子串 的长度的大小
一个实际的例子
|
|
遍历过程中List包含的元素情况如下:
|
|
文章作者 P.X.C
上次更新 2022-07-10
许可协议 不允许任何形式转载。