滑动窗口算法的平移、扩张、收缩及其模板的使用
近期因为一直在上课,好久没更新博客了。今天来更新一期最近练的滑动窗口:
滑动窗口顾名思义就是在两个指针间形成一个窗口,因为使用双指针解决问题,所以一般也叫双指针算法。
什么情况适合用滑动窗口算法呢?一般滑动窗口是暴力算法的优化版,所以一般在求连续区间、子串、子数组时使用,能有效地将暴力算法的时间复杂度优化到O(n)。
滑动窗口的平移、扩张、收缩
滑动窗口一般有3种操作:即平移、扩张、收缩
平移:指不改变滑动窗口大小,通过改变滑动窗口的左右边界,来实现滑动窗口的整体左移或右移。
扩张:指扩张滑动窗口的大小,一般通过增加滑动窗口的右边界来实现。
收缩:指收缩滑动窗口的大小,一般通过增加滑动窗口的左边界来实现。
滑动窗口的模板及使用
题目来源:leetcode(力扣)
题目链接:https://leetcode-cn.com/problems/get-equal-substrings-within-budget/
模板1
class Solution {
public:
int equalSubstring(string s, string t, int maxCost) {
int n = s.