第五篇:滑动窗口算法及习题

滑动窗口算法的基本思路是维护一个窗口,通过移动窗口的两个边界来处理问题。

具体来说,搞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

学习完滑动窗口算法后,自己做不出来,还需要再做。

 

posted on 2017-07-23 01:11  koushr  阅读(351)  评论(0)    收藏  举报

导航