Уникальная серия рун
Условие
В аркадной игре на панели появляются руны — строка из строчных латинских букв. Комбо засчитывается, если выбран подряд идущий кусок строки, где ни одна руна не повторяется.
Тебе нужно узнать, какой максимальной длины комбо вообще можно собрать.
Формат ввода
Одна строка s, состоящая только из строчных латинских букв a–z.
Формат вывода
Выведи одно целое число — максимальную длину подстроки (непрерывного фрагмента) без повторяющихся символов.
Ограничения
1 ≤ |s| ≤ 100000- алфавит:
a–z
Пример
Ввод:
abca
Вывод:
3Как решать — идея подхода
Приём: Скользящее окно + последние позиции
Ключевое наблюдение: нам нужна самая длинная подстрока без повторов, значит удобно поддерживать текущий «хороший» отрезок s[l..r], где все символы уникальны. Когда добавляем новый символ справа, проблема возникает только если этот символ уже встречался внутри окна.
Приём: скользящее окно (two pointers) + массив последних позиций для букв. Он работает, потому что левую границу никогда не нужно двигать назад: если в окне появился повтор, чтобы снова сделать окно уникальным, достаточно сдвинуть l за прошлое вхождение повторяющейся буквы.
План:
- Создай массив
last[26], гдеlast[c]— последняя позиция буквыc(начально -1). - Поставь
l = 0,best = 0. - Иди правой границей
rпо строке: - Пусть текущая буква
ch, её индексc. - Если
last[c] >= l, значит прошлое вхождение внутри окна, сдвиньl = last[c] + 1. - Обнови
last[c] = r. - Текущая длина окна
cur = r - l + 1, обновиbest. - Выведи
best.
Мини-сниппет ключевого шага: if last[c] >= l: l = last[c] + 1
Сложность: O(n) по времени, O(1) по памяти (26 букв).
Частая ошибка: делать l = last[c] + 1 без проверки last[c] >= l. Тогда l может «откатиться» назад из-за старого вхождения и окно перестанет быть корректным.
Решить задачу с автопроверкой на Python →
Куда дальше
- Python на олимпиадах — где языка хватает с запасом, а где начинают значить лимиты — с замерами
- Родителям: подготовка бесплатно — сколько стоит репетитор, что даёт бесплатный маршрут и как понять, что ребёнок занимается
- Школьный этап ВсОШ по информатике — как устроен первый этап и план подготовки за четыре недели