Problem
Given a string s
and an integer k
, return **the maximum number of vowel letters in any substring of *s
* with length **k
.
Vowel letters in English are 'a'
, 'e'
, 'i'
, 'o'
, and 'u'
.
Example 1:
Input: s = "abciiidef", k = 3
Output: 3
Explanation: The substring "iii" contains 3 vowel letters.
Example 2:
Input: s = "aeiou", k = 2
Output: 2
Explanation: Any substring of length 2 contains 2 vowels.
Example 3:
Input: s = "leetcode", k = 3
Output: 2
Explanation: "lee", "eet" and "ode" contain 2 vowels.
Constraints:
1 <= s.length <= 10^5
s
consists of lowercase English letters.1 <= k <= s.length
Solution (Java)
class Solution {
private boolean isVowel(char c) {
return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}
public int maxVowels(String s, int k) {
int maxVowelCount = 0;
int vowelCount = 0;
int i = 0;
int j = 0;
while (j < s.length()) {
char c = s.charAt(j);
if (isVowel(c)) {
vowelCount++;
}
if ((j - i + 1) == k) {
maxVowelCount = Math.max(maxVowelCount, vowelCount);
if (isVowel(s.charAt(i))) {
vowelCount--;
}
i++;
}
j++;
}
return maxVowelCount;
}
}
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(n).