列表

详情


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

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int maxVowels(string s, int k) { } };

javascript 解法, 执行用时: 96 ms, 内存消耗: 43.8 MB, 提交时间: 2022-12-11 12:33:53

/**
 * @param {string} s
 * @param {number} k
 * @return {number}
 */
var maxVowels = function(s, n) {
    //容易理解的js滑动窗口
    const letters = ['a','e','i','o','u'];
    const map = new Map();
    //将元音字母存储,用来快速判断是否为元音字母
    letters.forEach( val => map.set(val,true));
    //元音字母个数
    let  count = 0;
    //遍历从第一个数 到 第 n -1 个数,算出第一个窗口的count
    for(let i = 0 ;i < n ; i++){
        if(map.has(s[i])){
            count++;
        }
    }
    //将最大元音个数先存为第一个窗口,窗口右移不断更新最大值
    let max = count;
    // i 为窗口右边界下标 ,长度为n,左边界为 i - n
    //窗口每次右移 左边界+1,中间元素不考虑,右边界+1
    //[a,e,b,c] left = 0 , right =2, count = 2
    //[a,e,b,c] left = 1 , right =3, count = 1 
    //相当于移除了a 增加了c 
    //如果left 为元音字母 count --,right为元音字母count++
    for(let i = n  ; i< s.length ; i++){
        if(map.has(s[i])){
            count++
        }
        if(map.has(s[i-n])){
            count--;
        }
        max = Math.max(max,count)
    }
    return max
};

java 解法, 执行用时: 11 ms, 内存消耗: 41.8 MB, 提交时间: 2022-12-11 12:33:29

class Solution {
    public int maxVowels(String s, int k) {
        int n = s.length();
        int vowel_count = 0;
        for (int i = 0; i < k; ++i) {
            vowel_count += isVowel(s.charAt(i));
        }
        int ans = vowel_count;
        for (int i = k; i < n; ++i) {
            vowel_count += isVowel(s.charAt(i)) - isVowel(s.charAt(i - k));
            ans = Math.max(ans, vowel_count);
        }
        return ans;
    }

    public int isVowel(char ch) {
        return ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' ? 1 : 0;
    }
}

python3 解法, 执行用时: 240 ms, 内存消耗: 15.4 MB, 提交时间: 2022-12-11 12:33:15

class Solution:
    def maxVowels(self, s: str, k: int) -> int:
        def isVowel(ch):
            return int(ch in "aeiou")
        
        n = len(s)
        vowel_count = sum(1 for i in range(k) if isVowel(s[i]))
        ans = vowel_count
        for i in range(k, n):
            vowel_count += isVowel(s[i]) - isVowel(s[i - k])
            ans = max(ans, vowel_count)
        return ans

上一题