当前位置:实例文章 » 其他实例» [文章]leetcode:定长字串中元音的最大数目

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`。

其他信息

其他资源

Top