Уникальная серия рун

тема: Строки · уровень: продвинутый

Условие

В аркадной игре на панели появляются руны — строка из строчных латинских букв. Комбо засчитывается, если выбран подряд идущий кусок строки, где ни одна руна не повторяется.

Тебе нужно узнать, какой максимальной длины комбо вообще можно собрать.

Формат ввода

Одна строка s, состоящая только из строчных латинских букв az.

Формат вывода

Выведи одно целое число — максимальную длину подстроки (непрерывного фрагмента) без повторяющихся символов.

Ограничения

Пример

Ввод:

abca

Вывод:

3

Как решать — идея подхода

Приём: Скользящее окно + последние позиции

Ключевое наблюдение: нам нужна самая длинная подстрока без повторов, значит удобно поддерживать текущий «хороший» отрезок s[l..r], где все символы уникальны. Когда добавляем новый символ справа, проблема возникает только если этот символ уже встречался внутри окна.

Приём: скользящее окно (two pointers) + массив последних позиций для букв. Он работает, потому что левую границу никогда не нужно двигать назад: если в окне появился повтор, чтобы снова сделать окно уникальным, достаточно сдвинуть l за прошлое вхождение повторяющейся буквы.

План:

Мини-сниппет ключевого шага: if last[c] >= l: l = last[c] + 1

Сложность: O(n) по времени, O(1) по памяти (26 букв).

Частая ошибка: делать l = last[c] + 1 без проверки last[c] >= l. Тогда l может «откатиться» назад из-за старого вхождения и окно перестанет быть корректным.

Решить задачу с автопроверкой на Python →

Куда дальше