Difficulty: Medium
https://leetcode.com/problems/maximum-number-of-vowels-in-a-substring-of-given-length/
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 <= 105
s
consists of lowercase English letters.1 <= k <= s.length
var maxVowels = function (s, k) {
let maxVowelsResult = 0;
const vowels = ['a', 'e', 'i', 'o', 'u'];
const isVowel = s => s === 'a' || s === 'e' || s === 'i' || s === 'o' || s === 'u';
// use sliding window
let left = 0;
let right = 0;
let currentVowels = 0;
while (right < s.length) {
// if (vowels.includes(s[right])) {
if (isVowel(s[right])) {
currentVowels++;
}
if (right - left + 1 === k) {
maxVowelsResult = Math.max(maxVowelsResult, currentVowels);
// if (vowels.includes(s[left])) {
if (isVowel(s[left])) {
currentVowels--;
}
left++;
}
right++;
}
return maxVowelsResult;
};
class Solution
{
/**
* @param String $s
* @param Integer $k
* @return Integer
*/
function maxVowels(string $s, int $k): int {
$maxVowelsResult = 0;
$vowels = ['a', 'e', 'i', 'o', 'u'];
$vowelsCountCurrent = 0;
$leftIndex = 0;
$rightIndex = 0;
$sLength = strlen($s);
while ($rightIndex < $sLength) {
if (in_array($s[$rightIndex], $vowels)) {
$vowelsCountCurrent++;
}
if ($rightIndex - $leftIndex + 1 == $k) {
$maxVowelsResult = max($maxVowelsResult, $vowelsCountCurrent);
if (in_array($s[$leftIndex], $vowels)) {
$vowelsCountCurrent--;
}
$leftIndex++;
}
$rightIndex++;
}
return $maxVowelsResult;
}
}