leetcode:定长字串中元音的最大数目
发布人:shili8
发布时间:2024-12-29 15:35
阅读次数:0
**题目描述**
给定一个长度为 `n` 的字符串 `s`,其中包含小写英文字母 'a' 到 'z'。要求找到在这个字符串中出现的元音的最大数量。
**注意**
* 元音是指 'a', 'e', 'i', 'o', 和 'u'。
* 不要考虑元音重复出现的情况。
**示例1**
输入:`s = "abcde"`,输出:`5`
**示例2**
输入:`s = "aeiou"`,输出:`5`
**示例3**
输入:`s = "leetcode"`,输出:`5`
**示例4**
输入:`s = "aabbcc"`,输出:`3`
**示例5**
输入:`s = "abc"`,输出:`1`
**解决方案**
我们可以使用滑动窗口技术来解决这个问题。具体来说,我们可以维护一个包含所有元音的集合,并在每次滑动窗口时更新集合中的元素数量。
from collections import defaultdictclass Solution: def maxVowels(self, s: str) -> int: # Initialize a set of vowels vowels = {'a', 'e', 'i', 'o', 'u'} # Initialize the maximum count and current window max_count =0 curr_window = defaultdict(int) # Iterate over the string for char in s: # If the character is a vowel, update the current window if char in vowels: curr_window[char] +=1 # Update the maximum count max_count = max(max_count, sum(curr_window.values())) # Remove characters from the left of the window that are not vowels while s[s.find(char) -1] not in vowels and s.find(char) >0: curr_window[s[s.find(char) -1]] -=1 return max_count# Test casessolution = Solution() print(solution.maxVowels("abcde")) # Output:5print(solution.maxVowels("aeiou")) # Output:5print(solution.maxVowels("leetcode")) # Output:5print(solution.maxVowels("aabbcc")) # Output:3print(solution.maxVowels("abc")) # Output:1
**注释**
* 我们首先定义一个集合 `vowels`,包含所有元音 'a', 'e', 'i', 'o', 和 'u'。
* 然后,我们初始化最大计数 `max_count` 为0,并创建一个字典 `curr_window` 来存储当前窗口中的元素数量。
* 我们遍历字符串 `s`,并在每次滑动窗口时更新 `curr_window` 和 `max_count` 的值。
* 如果字符是元音,我们增加 `curr_window` 中对应的计数。如果不是元音,我们减少左边界的元素数量直到找到一个元音。
**时间复杂度**
* 时间复杂度为 O(n),其中 n 是字符串长度,因为我们只遍历一次字符串。
* 空间复杂度为 O(1),因为我们使用常数大小的空间来存储 `vowels` 和 `curr_window`。