不好解释,直接上题目
已解答
中等
相关标签
相关企业
提示
给你字符串 s
和整数 k
。
请返回字符串 s
中长度为 k
的单个子字符串中可能包含的最大元音字母数。
英文中的 元音字母 为(a
, e
, i
, o
, u
)。
示例 1:
输入:s = "abciiidef", k = 3 输出:3 解释:子字符串 "iii" 包含 3 个元音字母。
题目意思就是找出s中所有长度为k的连续子字符串,然后求子字符串中元音字母的数量,最后取一个最大值即可
先看看暴力做法是什么样的
class Solution:
def maxVowels(self, s: str, k: int) -> int:
n = len(s)
cnt = 0
maxcnt = cnt
for i in range(n-k+1): # 控制起点
cnt = 0
for j in s[i:i+k]:
if j in "aeiou":
cnt += 1
maxcnt = max(cnt,maxcnt)
return maxcnt
# 这种方法的时间复杂度在最坏的情况下是O(n^2)的 是无法通过leetcode所给的数据量的
因此我们给出一个O(n)时间复杂度的方法
class Solution:
def maxVowels(self, s: str, k: int) -> int:
n = len(s)
cnt = 0
for i in range(n):
if s[i] in "aeiou":
cnt += 1
res = cnt
for j in range(k,n):
if s[i-k] in "aeiou":
cnt -= 1
if s[i] in "aeiou":
cnt += 1
res = max(cnt,res)