题目
给你字符串 s 和整数 k 。
请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。
英文中的 元音字母 为(a, e, i, o, u)。
- 来源:力扣(LeetCode)
- 链接:leetcode.cn/problems/ma…
- 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一
思路
- 滑动窗口
代码
public int maxVowels(String s, int k) {
char[] str = s.toCharArray();
int n = str.length;
int i = 0;
int j = 0;
int max = 0;
int count = 0;
while (j < n) {
if (isVowel(str[j])) {
count++;
}
if (j - i + 1 == k) {
max = Math.max(max, count);
if (isVowel(str[i])) {
count--;
}
i++;
}
j++;
}
return max;
}
private boolean isVowel(char c) {
return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}
- 上面的代码还是有点丑。
官方代码
public int maxVowels(String s, int k) {
char[] str = s.toCharArray();
int i = 0, j = 0;
int count = 0;
int max = 0;
for ( ; j < k; j++) {
if (isVowel(str[j])) {
count++;
}
}
max = Math.max(max, count);
for (; j < s.length(); j++) {
if (isVowel(str[i++])) {
count--;
}
if (isVowel(str[j])) {
count++;
}
max = Math.max(max, count);
}
return max;
}
private boolean isVowel(char c) {
return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}