Если min_s должна искать минимальную подстроку s, содержащую все символы a с учётом повторов, используйте скользящее окно и Counter оставшихся потребностей.
из collections импортировать Counter
Если min_s должна искать минимальную подстроку s, содержащую все символы a с учётом повторов, используйте скользящее окно и Counter оставшихся потребностей.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
из collections импортировать Counter
def min_s(a: str, s: str) -> str: need = Counter(a) res = ""
Ответ
Если min_s должна искать минимальную подстроку s, содержащую все символы a с учётом повторов, используйте скользящее окно и Counter оставшихся потребностей.
Это явная интерпретация незавершённого фрагмента: полное условие не приведено.
from collections import Counter
def min_s(a: str, s: str) -> str:
if not a:
return ''
need = Counter(a)
missing, left = len(a), 0
best = None
for right, char in enumerate(s):
if need[char] > 0:
missing -= 1
need[char] -= 1
while missing == 0:
if best is None or right + 1 - left < best[1] - best[0]:
best = (left, right + 1)
need[s[left]] += 1
if need[s[left]] > 0:
missing += 1
left += 1
return '' if best is None else s[best[0]:best[1]]
Каждый указатель проходит строку один раз: ожидаемое время O(len(a)+len(s)), память зависит от числа разных символов. Для требования без кратности исходные потребности должны быть единичными.