Храните левую границу окна и последний индекс каждого символа. При повторе внутри окна сдвигайте левую границу за прошлое вхождение; каждый символ обрабатывается один раз.
Приведите пример решения задачи Longest Substring Without Repeating Characters, используя скользящее окно, и объясните его ограничения и сложности.
Храните левую границу окна и последний индекс каждого символа. При повторе внутри окна сдвигайте левую границу за прошлое вхождение; каждый символ обрабатывается один раз.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Храните левую границу окна и последний индекс каждого символа. При повторе внутри окна сдвигайте левую границу за прошлое вхождение; каждый символ обрабатывается один раз.
def longest_unique(text):
last = {}
left = best = 0
for right, char in enumerate(text):
left = max(left, last.get(char, -1) + 1)
last[char] = right
best = max(best, right - left + 1)
return best
Ожидаемое время O(n), память O(k) для числа различных символов. Пустая строка даёт 0. Python здесь считает Unicode code points, а не пользовательские графемы; для сложных составных символов потребуется предварительная сегментация.