1456. 定长子串中元音的最大数目 - 力扣(LeetCode)
可以使用 滑动窗口 方法来解决这个问题。步骤如下:
- 初始化:计算前
k
个字符中元音字母的个数,作为初始窗口的值。 - 滑动窗口:遍历字符串,每次右移窗口,删除窗口左端字符,添加窗口右端字符,同时更新元音字母的计数。
- 维护最大元音计数:在滑动过程中,记录最大值。
Python 代码
def maxVowels(s, k):vowels = {'a', 'e', 'i', 'o', 'u'} # 使用集合加速查找count = max_count = sum(1 for c in s[:k] if c in vowels) # 计算初始窗口的元音数量for i in range(k, len(s)):count += (s[i] in vowels) - (s[i - k] in vowels) # 右移窗口,更新元音计数max_count = max(max_count, count) # 记录最大元音计数return max_count
示例
s = "abciiidef"
k = 3
print(maxVowels(s, k)) # 输出 3
复杂度分析
- 时间复杂度:O(n),其中
n
是字符串长度,我们遍历s
一次。 - 空间复杂度:O(1),只使用了几个变量,额外空间消耗极小。