X

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'.

To solve this problem, we can use a sliding window approach. We'll maintain a window of size k and slide it through the string s, calculating the count of vowels in each substring. We'll keep track of the maximum vowel count encountered during the traversal. Here's how we can implement it in Ruby:

def max_vowels(s, k)
    vowels = Set.new(['a', 'e', 'i', 'o', 'u'])
    max_vowel_count = 0
    current_vowel_count = 0

    (0...k).each do |i|
        current_vowel_count += 1 if vowels.include?(s[i])
    end

    max_vowel_count = current_vowel_count 

    (k...s.length).each do |i|
        current_vowel_count += 1 if vowels.include?(s[i])
        current_vowel_count -= 1 if vowels.include?(s[i - k])

        max_vowel_count = [max_vowel_count, current_vowel_count].max
    end

    max_vowel_count
    
end

First, we initialize a set of `vowels` containing all vowel letters.
We initialize variables `max_vowel_count` and `current_vowel_count` to track the maximum vowel count and the current vowel count within the sliding window, respectively.
We calculate the vowel count for the first window of length `k` by iterating over the first `k` characters of the string `s`.
We then slide the window through the rest of the string, updating the current vowel count by incrementing for the new character entering the window and decrementing for the character exiting the window.
We update the maximum vowel count encountered during the traversal.
Finally, we return the maximum vowel count found.

The time complexity is O(n), where n is the length of string `s`.