解题方法:字符串中求定长子串,明显使用定长划窗
思路:
1、记录初始窗口K内的元音字母个数,也就是母串前k个字符中的元音字母数
2、更新答案为此刻窗口内的元音字母个数
3、滑动窗口,判断加入窗口的字符和离开窗口的字符是不是元音字母,对计数进行加减
代码:
class Solution {
public:
int maxVowels(string s, int k) {
int ans = 0,corrent_val = 0;
for(int i = 0;i < s.length();i++){
//进入窗口
if(judge(s[i])) corrent_val++;
if(i < k-1) continue; //这里是为了保证初始窗口一定有k大小
//更新答案为当前窗口的元音字母数
ans = max(ans,corrent_val);
//离开窗口
if(judge(s[i-k+1])) corrent_val--;
}
return ans;
}
bool judge(char a){
if(a=='a'||a=='e'||a=='i'||a=='o'||a=='u')
return true;
return false;
}
};
class Solution:
def maxVowels(self, s: str, k: int) -> int:
ans = val = 0
for i,c in enumerate(s):
if c in "aeiou":
val+=1
if i<k-1:
continue
ans = max(ans, val)
if s[i-k+1] in "aeiou":
val-=1
return ans