class Solution {
public:
int maxVowels(string s, int k) {
}
};
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
原站题解
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