滑动窗口与双指针
记录滑动窗口与双指针例题
专题:定长/不定长/单序列/双序列/三指针/分组循环 👉 专题链接
专题文章作者:灵茶山艾府
一. 定长滑动窗口
1. 定长子串中元音的最大数目(模板)
题目介绍:
给你字符串
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:代码实现
java
public int maxVowels(String s, int k) {
char[] chars = s.toCharArray();
int max = 0;
int ans = 0;
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
// 入窗
if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
ans++;
}
// 跟新最值统计
max = Math.max(max, ans);
// 不满足最大窗口
int left = i + 1 - k;
if (left < 0) {
continue;
}
// 下轮出窗计算
c = chars[left];
if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
ans--;
}
}
return max;
}