1456. 定长子串中元音的最大数目
大约 2 分钟
1456. 定长子串中元音的最大数目
- 标签:字符串、滑动窗口
- 难度:中等
题目链接
题目大意
描述:给定字符串 和整数 。
要求:返回字符串 中长度为 的单个子字符串中可能包含的最大元音字母数。
说明:
- 英文中的元音字母为(, , , , )。
- 。
- 由小写英文字母组成。
- 。
示例:
- 示例 1:
输入:s = "abciiidef", k = 3
输出:3
解释:子字符串 "iii" 包含 3 个元音字母。
- 示例 2:
输入:s = "aeiou", k = 2
输出:2
解释:任意长度为 2 的子字符串都包含 2 个元音字母。
解题思路
思路 1:滑动窗口
固定长度的滑动窗口题目。维护一个长度为 的窗口,并统计滑动窗口中最大元音字母数。具体做法如下:
- 用来维护长度为 的单个字符串中最大元音字母数。 用来维护窗口中元音字母数。集合 用来存储元音字母。
- 、 都指向字符串 的第一个元素,即:,。
- 判断 是否在元音字母集合中,如果在则用 进行计数。
- 当窗口元素个数为 时,即: 时,更新 。然后判断 是否为元音字母,如果是则
window_count -= 1
,并向右移动 ,从而缩小窗口长度,即left += 1
,使得窗口大小始终保持为 。 - 重复 步,直到 到达数组末尾。
- 最后输出 。
思路 1:代码
class Solution:
def maxVowels(self, s: str, k: int) -> int:
left, right = 0, 0
ans = 0
window_count = 0
vowel_set = ('a','e','i','o','u')
while right < len(s):
if s[right] in vowel_set:
window_count += 1
if right - left + 1 >= k:
ans = max(ans, window_count)
if s[left] in vowel_set:
window_count -= 1
left += 1
right += 1
return ans
思路 1:复杂度分析
- 时间复杂度:,其中 为字符串 的长度。
- 空间复杂度:。