可变窗——滑动窗口

随记
滑动窗口 2021.03.15

//滑动窗口模板1:(窗口的大小不停的变化,可能求最大窗口或最小窗口)
int slide_window1(string s, string t, int maxCost)
{
    int left = 0, rigth = 0;
    while (rigth<s.size())
    {
        //对右边界进行操作
        rigth++;
        while (对条件进行判定)
        {
            //对左边界进行操作
            left++;
        }
        //每次的窗口变化总结
    }
    return ;//返回值
}
//滑动窗口模板2:(窗口大小不变 为k ,可能求窗口内的属性或大小值)
int slide_window2(string s,int k)
{
    for (int i = 0; i < k; i++)
    {
        //窗口形成
    }
    for (int i = k; i < s.size(); i++)
    {//窗口移动
        int left = i - k;//定义左边界
        
        //对右边界 i 及左边界 left 处理
    }
    return max;
}

eg:

int equalSubstring(string s, string t, int maxCost)
{
    int left = 0, rigth = 0;
    int sum = 0, max_wide = 0;
    while (rigth<s.size())
    {
        sum += abs(s[rigth] - t[rigth]);
        rigth++;
        while (sum>maxCost)
        {
            sum -= abs(s[left] - t[left]);
            left++;
        }
        if (rigth - left > max_wide)
            max_wide = rigth - left;
    }
    return max_wide;
}
int judge(char a)
{//元音返回1,否则返回0
    return a == 'a' || a == 'e' || a == 'i' || a == 'o' || a == 'u';
}
int maxVowels(string s, int k)
{
    int num = 0;
    for (int i = 0; i < k; i++)
    {
        num += judge(s[i]);
        //printf("\n%d\n", num);
    }
    int max = num;
    for (int i = k; i < s.size(); i++)
    {
        int left = i - k;
        num += judge(s[i]);
        num -= judge(s[left]);
        //printf("\n%d\n", num);
        if (num > max)
            max = num;
    }
    return max;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值