te da cadenas s
y enteros k
.
Devuelve el número máximo de vocales que pueden estar contenidas en una sola subcadena s
de longitud en la cadena.k
Las vocales en inglés son ( a
, e
, i
, o
, u
).
Ejemplo 1:
Entrada: s = "abciiidef", k = 3 Salida: 3 Explicación: La subcadena "iii" contiene 3 vocales.
Ejemplo 2:
Entrada: s = "aeiou", k = 2 Salida: 2 Explicación: Cualquier subcadena de longitud 2 contiene 2 vocales.
Ejemplo 3:
Entrada: s = "leetcode", k = 3 Salida: 2 Explicación: "lee", "eet" y "ode" contienen 2 vocales.
Ejemplo 4:
Entrada: s = "ritmos", k = 4 Salida: 0 Explicación: La cadena s no contiene vocales.
Ejemplo 5:
Entrada: s = "intentar", k = 4 Salida: 1
Idea: ventana corredera, la longitud de la ventana es k. Cuando la ventana se mueve, las letras que entran en la ventana de la derecha son vocales, y las letras que salen de la ventana de la izquierda también son vocales. De esta manera, una entrada y una salida se anulan. La letra de la derecha El lado de la letra que sale de la ventana no es una vocal, y la letra que sale de la ventana a la izquierda es una vocal. En este momento, el número de vocales es -1.
class Solution:
def maxVowels(self, s: str, k: int) -> int:
start , tmp = 0 , 0 # 第一个窗口的起始位置,当前窗口元音字符个数
end = k - 1 # 第一个窗口结束位置
mapping = 'aeiou'
for i in range(end):
if s[i] in mapping:
tmp += 1
result = tmp
while end < len(s):
if s[end] in mapping: # 判断窗口往后移动的这个月元素是否是元音
tmp += 1
result = tmp if tmp > result else result
if tmp >= k: # 如果当前窗口的元音数=k,则直接返回
return k
if s[start] in mapping:
tmp -= 1
start += 1
end += 1
return result