目录
题目:
示例:
分析:
代码+运行结果:
题目:
示例:
分析:
就难度而言,我觉得算不上中等,因为和上一题基本一致,只不过上一题是求最大平均数,而这一题是求最大元音数,并且都是固定长度的滑动窗口。
我们只需要在窗口滑动的时候判断滑出窗口的字符是不是元音字符,以及滑入窗口的字符是不是元音字符,然后再相应的将元音数进行加一减一即可。
参考上一题的题解再看看下面的代码,应该是很好理解的。
代码+运行结果:
class Solution {
public:
//用于检查一个字符是不是元音
bool check(char& c){
string Ch="aeiou";
for(char e:Ch){
if(e==c) return true;
}
return false;
}
int maxVowels(string s, int k) {
int l=0;int r=l+k-1;
int res=0;
//计算初始窗口有多少个元音字母数
for(int i=l;i<k;i++){
if(check(s[i])) res++;
}
int temp=res;
while(r<s.size()){
//滑动窗口
if(check(s[l++])) temp--;
if(check(s[++r])) temp++;
res=max(res,temp);
if(res==k) return res; //若是有都是元音的窗口,那么也不用接着遍历了,不可能有比窗口长度还大的结果了
}
return res;
}
};