Комбо-стрик одной кнопки
Условие
В игре герой делает комбо, если несколько ходов подряд нажимать одну и ту же кнопку.
Дана запись нажатий за матч — строка из символов. Найдите длину самого длинного подряд идущего блока одинаковых символов.
Формат ввода
Одна строка s — запись нажатий.
Формат вывода
Выведите одно целое число — максимальную длину подряд идущего блока одинаковых символов в строке.
Ограничения
1 ≤ |s| ≤ 2000- Строка состоит из любых печатных символов без пробелов.
Пример
Ввод:
AAABBA
Вывод:
3
Пояснение: самый длинный блок — AAA длины 3.
Как решать — идея подхода
Приём: Линейный проход (две переменные: текущая серия и максимум)
Ключевое наблюдение: максимальный «комбо-стрик» — это максимум среди длин всех подряд идущих одинаковых символов. Эти длины можно получить за один проход, сравнивая каждый символ с предыдущим.
Почему работает: граница блока появляется ровно там, где s[i] != s[i-1]. Значит, можно вести счётчик текущей серии cur: увеличивать его, пока символы одинаковые, и сбрасывать в 1 при смене символа. Параллельно храним лучший ответ best.
План:
- Прочитайте строку
s. Так как|s| >= 1, начните сcur = 1,best = 1. - Для каждого
iот 1 доlen(s)-1: - если
s[i] == s[i-1], тоcur += 1; - иначе обновите максимум и начните новый блок:
best = max(best, cur),cur = 1. - После цикла не забудьте ещё раз обновить
best = max(best, cur)(последний блок мог быть самым длинным). - Выведите
best.
Мини-сниппет для обновления: best = max(best, cur).
Сложность: O(n) по времени и O(1) по памяти.
Частая ошибка: обновить максимум только при «разрыве» и забыть про последний блок — тогда ответы неверны, если самая длинная серия в конце строки.
Разберись руками
Есть строка нажатий: AAABBA. Комбо-стрик — это подряд идущие одинаковые символы. Нужно найти длину самого длинного такого блока.
- В строке `AAABBA` отметь позиции (индексы с 0), где НАЧИНАЕТСЯ новый блок одинаковых символов. (Подсказка: индекс 0 всегда начало блока.)
- Теперь отметь позиции (индексы с 0), где ЗАКАНЧИВАЕТСЯ блок одинаковых символов (последний символ блока).
- Посчитай длины блоков по найденным границам и введи максимальную длину. (Длина блока = сколько индексов от старта до конца включительно.)
Идея: Идём по строке слева направо и считаем длину текущего подряд идущего блока одинаковых символов. Когда символ меняется, сравниваем текущую длину с лучшей (максимальной) и начинаем новый блок с длиной 1. В конце не забываем ещё раз сравнить последний блок с максимумом.
Решить задачу с автопроверкой на Python →
Куда дальше
- С нуля до олимпиады: маршрут — сколько занимает язык, какие приёмы нужны и к какому этапу это ведёт
- Родителям: подготовка бесплатно — сколько стоит репетитор, что даёт бесплатный маршрут и как понять, что ребёнок занимается
- Школьный этап ВсОШ по информатике — как устроен первый этап и план подготовки за четыре недели