Mediumsliding-window

Как найти longest substring без повторений?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

LeetCode 3. Sliding window с hash set. Окно [left, right] всегда содержит уникальные символы; при повторе сдвигаем left. O(n) время, O(min(n, alphabet)) память.

def lengthOfLongestSubstring(s):
    seen = set()
    left = max_len = 0
    for right in range(len(s)):
        while s[right] in seen:
            seen.remove(s[left])
            left += 1
        seen.add(s[right])
        max_len = max(max_len, right - left + 1)
    return max_len

Оптимизация — hash map char → last index, прыгать left сразу (вместо linear left++). Sliding window — общий паттерн для substring/subarray: min window substring (76), longest repeating char replacement (424), permutation in string (567). O(n), т.к. каждый элемент visited O(1) раз.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.