滑动窗口

 

76. 最小覆盖子串

567. 字符串的排列

438. 找到字符串中所有字母异位词

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

 

记得一定要看到文末,会有惊喜哦哦哦哦!!!

滑动窗口是为了解决字符串中子串相关问题,举几个例子:

上述四个例子分别对应最上面的四个题目,详情可点击题目查看

 

我们的思路很简单:维护一个窗口window,不断的对窗口进行扩张和收缩,来得到最终的结果。我们接下来针对第一个例子来详细介绍滑动窗口的思想

首先我们利用左右指针来模拟一个窗口,窗口的大小为[left, right),注意是左闭右开

其次我们还需要一个存放我们目标结果的窗口need,只有当window==need的时候,才进行一次结果的更新;既然need是存放目标结果的窗口,那么need始终都不会发生改变

同时我们维护了一个valid变量,根据题意,只有当valid满足相应的条件时,才进行窗口的收缩

如上面的动图所示。下面给出相对于的代码 (建议仔细看注释)。题目最小覆盖子串

题目 字符串的排列

题目 找到字符串中所有字母异位词

题目 无重复字符的最长子串

注意:这个题目和模版有少许的区别,但是核心思想是不变的,只是少了need目标窗口而已。但是我尽量把代码和模版保持了一致


好了,现在来总结一下模版吧!!哈哈哈哈哈