【从零开始的LeetCode-算法】1456. 定长子串中元音的最大数目

给你字符串 s 和整数 k

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

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

示例 1:

复制代码
输入:s = "abciiidef", k = 3
输出:3
解释:子字符串 "iii" 包含 3 个元音字母。

示例 2:

复制代码
输入:s = "aeiou", k = 2
输出:2
解释:任意长度为 2 的子字符串都包含 2 个元音字母。

示例 3:

复制代码
输入:s = "leetcode", k = 3
输出:2
解释:"lee"、"eet" 和 "ode" 都包含 2 个元音字母。

示例 4:

复制代码
输入:s = "rhythms", k = 4
输出:0
解释:字符串 s 中不含任何元音字母。

示例 5:

复制代码
输入:s = "tryhard", k = 4
输出:1

提示:

  • 1 <= s.length <= 10^5
  • s 由小写英文字母组成
  • 1 <= k <= s.length

我的解答:

java 复制代码
class Solution {
    public int maxVowels(String s, int k) {
        int res = 0;
        int[] nums = new int[s.length()];
        Arrays.fill(nums,0);
        for(int i = 0;i < s.length();i++){
            // 非元音字母以0表示,元音字母以1表示
            if(s.charAt(i) == 'a' || s.charAt(i) == 'e' || s.charAt(i) == 'i' || s.charAt(i) == 'o' || s.charAt(i) == 'u'  )
            {
                nums[i] = 1;
            }
        }
        int d = 0;
        for(int i = 0; i < nums.length;i++){
            // 记入每段长度为k的字符串中的元音字母数
            d += i < k ? nums[i] : nums[i] - nums[i-k];
            res = Math.max(d,res);
        }
        return res;
    }
}
相关推荐
HoneyMoose4 小时前
Jenkins Cloudflare 部署提示错误
java·servlet·jenkins
阿丰资源4 小时前
基于SpringBoot的物流信息管理系统设计与实现(附资料)
java·spring boot·后端
Predestination王瀞潞4 小时前
Java EE3-我独自整合(第四章:Spring bean标签的常见配置)
java·spring·java-ee
overmind4 小时前
oeasy Python 121[专业选修]列表_多维列表运算_列表相加_列表相乘
java·windows·python
资深数据库专家4 小时前
总账EBS 应用服务器1 的监控分析
java·网络·数据库
房开民4 小时前
可变参数模板
java·开发语言·算法
t***5444 小时前
如何在现代C++中更有效地应用这些模式
java·开发语言·c++
_深海凉_4 小时前
LeetCode热题100-最小栈
java·数据结构·leetcode
不知名的忻4 小时前
Morris遍历(力扣第99题)
java·算法·leetcode·morris遍历
daidaidaiyu5 小时前
一文学习入门 ThingsBoard 开源物联网平台
java·mqtt·spring