Приведите пример решения задачи 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, а не пользовательские графемы; для сложных составных символов потребуется предварительная сегментация.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее