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 подскажет развёрнутый ответ в реальном времени.