Определение максимальной длины подстроки без дублирующихся символов

Используйте скользящее окно и словарь последних позиций символов. При повторе сдвигайте левую границу за предыдущий экземпляр, не двигая её назад. Сложность — O(n).

Короткий ответ

Что ответить на собеседовании

Используйте скользящее окно и словарь последних позиций символов. При повторе сдвигайте левую границу за предыдущий экземпляр, не двигая её назад. Сложность — O(n).

Подробный разбор

Ответ с пояснениями

Условие

Реализуйте функцию, принимающую строку и возвращающую длину самой длинной последовательности символов, в которой нет повторов.

Пример: Вход: "abcabcbb" → Выход: 3 Вход: "bbbbbb" → Выход: 1 Вход: "pwwkew" → Выход: 3

Ответ

Используйте скользящее окно и словарь последних позиций символов. При повторе сдвигайте левую границу за предыдущий экземпляр, не двигая её назад. Сложность — O(n).

Храним только окно без повторов и максимальную найденную длину:

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

Для abcabcbb и pwwkew результат 3, для bbbbbb — 1, для пустой строки — 0. Память O(k), где k — число разных символов. Здесь символ означает Unicode code point, а не обязательно целую визуальную графему.

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

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

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

Подробнее