228 字
1 分钟
Algorithm
2025-09-01

灵茶山艾府-如何科学刷题?

模板#

滑动窗口#

规则: 入-更新-出

确认左端点范围#

在[L,R]的范围内, 窗口大小k

那么, R-L+1=k => L=R-k+1

代码#

假定题目是找s中在长度k个字串中最多有多少元音字母

# Python
class Solution:
def maxVowels(self,s,k):
ans=vowel=0
for i,c in enumerate(s):
# 入
if c in "aeiou":
vowel+=1
if i < k-1:
continue
# 更新
ans=max(ans,vowel)
# 出
if s[i-k+1] in "aeiou":
voewl-=1
return ans
// Java
class Solution:{
public int maxVowels(String S, int k){
// toCharArray(): 将一个字符串(String)转换成一个新的字符数组(char[])
char[] s=S.toCharArray();
int ans =0;
int vowel=0;
for (int i =0;i<s.length;i++){
// 入
if (s[i]=='a'|| ... || s[i]=='u'){
vowel++;
}
if (i<k-1){
continue;
}
// update
ans=Math.max(ans,vowel);
// 出
char out=s[i-k+1];
if (out=='a'||...||out=='u'){
vowel--;
}
}
return ans;
}
}
// JavaScript
var maxVowels=function(s,k){
let ans=0, vowel=0;
for (let i=0;i<s.length;i++){
// in
if (s[i]==='a'||...||s[i]==='u'){
vowel++;
}
if (i<k-1){
continue;
}
// update
ans=Math.max(ans,vowel);
// out
let out=s[i-k+1];
if (out[i]==='a'||...||out[i]==='u'){
vowel--;
}
}
return ans;
};
Algorithm
https://kamio-misuzu.github.io/posts/algorithm/
作者
Kamio-Misuzu
发布于
2025-09-01
许可协议
CC BY-NC-SA 4.0