leetcode 1456. Maximum Number of Vowels in a Substring of Given Length(给定长度的substring中最多的元音个数)

该代码实现了一个算法,通过滑动窗口和积分数组方法找到给定长度k的子串中最多元音字母的数量。在遍历字符串时,更新元音计数并存储在acc数组中,然后比较当前窗口与前一个k长度窗口的元音差值,以找到最大元音数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

长度为k的substring中,含有最多元音的个数。
其中,元音为a,e,i,o,u

思路:

要遍历所有长度为k的substring,
可以想象一个长度为k的滑动窗口,从i=0滑动到i-k,
每个窗口里面记录元音字母的个数,
找出最多的元音个数。

如果在每个滑动窗口中都记录元音字母的个数,会有重复操作,
一个位置可能被重复记录好几次。

这时会想到积分数组acc,i-k ~ i 这段窗口中元音个数为acc[ i ] - acc[ i-k ],
其中acc[ i ]为 0 ~ i 为止所有的元音个数。

    public int maxVowels(String s, int k) {
        char[] chs = s.toCharArray();
        int n = s.length();
        int[] acc = new int[n+1];
        int res = 0;
        int cnt = 0;
        

        for(int i = 1; i <= n; i++) {
            char ch = chs[i-1];
            if(ch=='a' || ch=='e'||ch=='i'||ch=='o'||ch=='u') cnt++;
            acc[i] = cnt;
        }
        
        int i = k;
        while(i <= n) {
            res = Math.max(res, acc[i]-acc[i-k]);
            i ++;
        }
        return res;
    }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值