原题
题解
方法一
暴力找出所有的长度为k的子串,并计算其中的元音字母数,而后取最大。此算法超时。
java代码:
//102 / 106 个通过测试用例 状态:超出时间限制
//2020.06.25 13:08
class Solution {
public int maxVowels(String s, int k) {
int ans=0;
for(int i=0;i<=s.length()-k;i++){
ans=Math.max(ans,zuidayuan(s.substring(i,i+k),k));
if(ans>=k){return k;}
}
return ans;
}
public int zuidayuan(String st, int k){
int daan=0;
for(int i=0;i<k;i++){
char c=st.charAt(i);
if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u'){
daan++;
}
}
return daan;
}
}
方法二
滑动窗口。
本思路java代码示例:
/*
@v7fgg
执行用时:15 ms, 在所有 Java 提交中击败了66.62%的用户
内存消耗:40.5 MB, 在所有 Java 提交中击败了100.00%的用户
2020年6月25日 14:29
*/
class Solution {
public int maxVowels(String s, int k) {
int ans=0;
for(int i=0;i<k;i++){
if(yuanyin(s.charAt(i))){ans++;}
if(ans==k){return k;}
}
int zuida=ans;
for(int i=k;i<s.length();i++){
if(yuanyin(s.charAt(i))){zuida++;}
if(yuanyin(s.charAt(i-k))){zuida--;}
ans=Math.max(zuida,ans);
if(ans==k){return k;}
}
return ans;
}
public boolean yuanyin(char c){
return c=='a'||c=='e'||c=='i'||c=='o'||c=='u';
}
}