LeetCode 1456. 定长子串中元音的最大数目
本文最后更新于 2025年4月21日 凌晨
LeetCode 1456. 定长子串中元音的最大数目
给你字符串 s
和整数 k
。
请返回字符串 s
中长度为 k
的单个子字符串中可能包含的最大元音字母数。
英文中的 元音字母 为(a
, e
, i
, o
, u
)。
典型的滑动窗口题目,窗口长度为 k,统计窗口中原音字母数字的最大值。当窗口移动时,不用每次都去计算窗口中所有的元音字母数 sum,只要判断右侧进入的字母是不是元音,是则 sum + 1,然后判断左侧出窗口的字母是不是元音,是则 sum - 1,最后更新一下最大值 maxSum。
这里先让窗口的右侧进入数组,减少一部分初始化的工作量,同时也可以处理窗口长度大于数组的情况。
class Solution {
public int maxVowels(String s, int k) {
char chars[] = s.toCharArray();
boolean v[] = new boolean[s.length()];
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
v[i] = true;
}
}
int sum = 0, maxSum = -1;
for (int i = 0; i < chars.length; i++) {
// right 表示上一次进窗口的字母位置
int right = i;
// left 表示上一次出窗口的字母位置
int left = right - k;
// 进窗口的字母是元音,总数+1
if (v[right]) {
sum++;
}
// 出窗口的字母位置 < 0 时,窗口还未完全在数组内,跳过处理,只统计进窗口元素即可。
// 出窗口的字母位置是在数组内部,总数-1。
if (left >= 0 && v[left]) {
sum--;
}
maxSum = Math.max(sum, maxSum);
}
return maxSum;
}
}
LeetCode 1456. 定长子串中元音的最大数目
https://blog.avezah.com/leetcode/lc1456/