长度为k的substring中,含有最多元音的个数。
其中,元音为a,e,i,o,u
思路:
要遍历所有长度为k的substring,
可以想象一个长度为k的滑动窗口,从i=0滑动到i-k,
每个窗口里面记录元音字母的个数,
找出最多的元音个数。
如果在每个滑动窗口中都记录元音字母的个数,会有重复操作,
一个位置可能被重复记录好几次。
这时会想到积分数组acc,i-k ~ i 这段窗口中元音个数为acc[ i ] - acc[ i-k ],
其中acc[ i ]为 0 ~ i 为止所有的元音个数。
public int maxVowels(String s, int k) {
char[] chs = s.toCharArray();
int n = s.length();
int[] acc = new int[n+1];
int res = 0;
int cnt = 0;
for(int i = 1; i <= n; i++) {
char ch = chs[i-1];
if(ch=='a' || ch=='e'||ch=='i'||ch=='o'||ch=='u') cnt++;
acc[i] = cnt;
}
int i = k;
while(i <= n) {
res = Math.max(res, acc[i]-acc[i-k]);
i ++;
}
return res;
}