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

Используйте скользящее окно и Map последних позиций символов. При повторе переносите начало окна вправо за предыдущую позицию символа и обновляйте максимальную длину.

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

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

Используйте скользящее окно и Map последних позиций символов. При повторе переносите начало окна вправо за предыдущую позицию символа и обновляйте максимальную длину.

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

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

Условие

Вам предоставлена строка s. Требуется определить длину наибольшего непрерывного фрагмента этой строки, в котором каждый символ встречается только один раз. Пример: Input: s = "abcabcbb" Output: 3

Ответ

Используйте скользящее окно и Map последних позиций символов. При повторе переносите начало окна вправо за предыдущую позицию символа и обновляйте максимальную длину.

static int longestUnique(String s) {
    var last = new java.util.HashMap<Character, Integer>();
    int start = 0, maximum = 0;
    for (int end = 0; end < s.length(); end++) {
        Integer old = last.put(s.charAt(end), end);
        if (old != null) start = Math.max(start, old + 1);
        maximum = Math.max(maximum, end - start + 1);
    }
    return maximum;
}

Для abcabcbb ответ 3. Ожидаемое время O(n), память O(k). Max не позволяет левой границе уйти назад. Символ и длина здесь определяются через UTF-16 char, что нужно отдельно изменить для требований по Unicode code points.

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

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

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

Подробнее