第五篇:滑动窗口算法及习题
滑动窗口算法的基本思路是维护一个窗口,通过移动窗口的两个边界来处理问题。
具体来说,搞2个指针,一个指针代表窗口的左边界,一个指针代表窗口的右边界。 先保持左指针不动,一直移动右指针(扩大窗口),直到窗口不满足条件。此时把左指针往右移动一下(缩小窗口),再次一直移动右指针,直到窗口不满足条件。直到右指针到最右侧为止。在扩大或缩小窗口的过程中,记录中间结果,比如最大值、最小值、子串长度等,从而求解问题的最终答案。
leetcode题目:
1、无重复字符的最长子串。med
学习完滑动窗口算法后,自己可以做出来。
假如字符串是pwwkew
窗口左边界索引为0,一直移动右边界,直至遇见重复的。此时右边界索引为1,最长子串长度为2。
移动窗口左边界至索引为1的位置,再次一直移动右边界,直至遇见重复的。此时右边界从索引为1的位置移动到索引为1的位置,最长子串长度为1。
移动窗口左边界至索引为2的位置,再次一直移动右边界,直至遇见重复的。此时右边界从索引为1的位置移动到索引为4的位置,最长子串长度为3。
移动窗口左边界至索引为3的位置,再次一直移动右边界,直至遇见重复的。此时右边界从索引为4的位置移动到索引为5的位置,最长子串长度为3。
移动窗口左边界至索引为4的位置,再次一直移动右边界,直至遇见重复的。此时右边界从索引为5的位置移动到索引为5的位置,最长子串长度为2。
移动窗口左边界至索引为5的位置,再次一直移动右边界,直至遇见重复的。此时右边界从索引为5的位置移动到索引为5的位置,最长子串长度为1。
故最长子串长度为3。
2、尽可能使字符串相等。med
学习完滑动窗口算法后,自己可以做出来。
假设s = "abcd",t = "bcdf",maxCost = 3
窗口左边界索引为0,一直移动右边界,直到cost大于等于3。此时右边界索引为2,最大长度为3。
移动窗口左边界至索引为1的位置,再次一直移动右边界,直到cost大于等于3。此时右边界索引为2,最大长度为2。
移动窗口左边界至索引为2的位置,再次一直移动右边界,直到cost大于等于3。此时右边界索引为2,最大长度为1。
故最大长度为3。
3、最小覆盖子串。hard
学习完滑动窗口算法后,自己做不出来,还需要再做。
浙公网安备 33010602011771号