滑动窗口算法

文章介绍了滑动窗口算法在处理连续数组或字符串数据时的作用,例如在寻找最短子数组、最长无重复字符子串等问题中的应用。通过举例展示了动态窗口和静态窗口的区别,并提供了Java代码实现来计算给定长度子串中元音字母的最大数目。文章强调了滑动窗口与队列的相似性,并提供了解题步骤和关键点。
摘要由CSDN通过智能技术生成

1.滑动窗口算法

类型题目

用于处理连续的数组数据或者字符串数据,常用来提取数据中的子数组或者子串。

209.长度最短的子数组

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

567.字符串的排序

1456. 定长子串中元音的最大数目

LeetCode力扣.滑动窗口专题

  1. 滑动窗口的使用方式:
  • 根据题目要求先设置窗口大小
  • 设置滑动范围
  • 滑动窗口
  • 退出
  1. 自我感觉滑动窗口的方式和队列的运行方式有很多相似的地方,就比如:
  • 根据题意设置队列大小 ------- 设置窗口大小

  • 队列先进先出的运行模式 ------- 窗口中的数据先进先出

  1. 但滑动窗口的特点是窗口可以是静态也可以是动态。
  • 案例一就是动态窗口,当选择值已经不能再改变的时候就可以通过动态改变窗口中的数据来判断是否是我们需要的值。
  • 案例二则是静态窗口,因为每道题的题意原因所以不能妄下定论说每个知识点的必然性。

使用步骤

  1. 先对定长长度范围内做一次循环(注意会不会窗口比长度还大)

    进行判断–先构造出窗口

  2. 对后续的作循环,将窗口向后推进,

    对每个进来的进行判断,每次和最值比较

  3. 返回前注意是不是要再做一次判断

1456. 定长子串中元音的最大数目

给你字符串 s 和整数 k

请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。

英文中的 元音字母 为(a, e, i, o, u)。

  • 基础知识问题

    1. Java字符串不能直接使用s[] (这是c++的东西)

      改成s.charAt(i);

    2. 多个数字判断大小可以用Math.max()。

    3. 单引号才是字符,双引号是字符串。

    4. if里面只能是boolean类型,不能用int类型

  • class Solution {
    public static int maxVowels(String s, int k) {
            int maxnum = 0;
            int curnum = 0;
            int length = s.length();
            int i;
            for(i = 0; i < k && i <length; i++){
    //函数返回的是int类型,所以无需使用if(也没法用,只能boolean)
    //直接加减效果更佳,代码更简洁
                    curnum += IsVovel(s.charAt(i));
                }
                maxnum = Math.max(curnum, maxnum);
                for (i = k; i < length; i++) {
                curnum += IsVovel(s.charAt(i))-IsVovel(s.charAt(i-k));
                maxnum = Math.max(curnum, maxnum);
    
                }
                return maxnum;
            }
    //单独用函数进行原因判断
            public static int IsVovel(char ch){
                return ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' ? 1 : 0;
    
            }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值