Задача ясна: получить строку, в которой для каждой максимальной серии подряд идущих одинаковых символов длина не превышает заданное число K. Порядок символов не меняем, полностью удалять серии не надо — если серия длинная, обрезаем её до длины K.
Пошаговый алгоритм
- Ввод: первую строку читаем как целое число K (> 1), вторую — строку s из латинских букв.
- Идем по строке слева направо, выделяем каждую максимальную серию одинаковых символов:
- фиксируем текущий символ ch и находим границу серии до тех пор, пока встречаются такие же символы.
- вычисляем длину серии run_len.
- в выходную строку добавляем min(run_len, K) копий символа ch.
- Переходим к следующей серии и повторяем.
- По завершении печатаем полученную строку.
Ключевые моменты
- Сложность: линейная по длине входной строки, O(n) время и O(n) память на выход.
- Различие между буквами: регистр имеет значение, то есть 'A' и 'a' считаются разными символами.
- Параметр K > 1, как указано в условии, но код корректно работает и при других значениях (если вдруг встретится).
Пример
- Ввод: K = 3, s = "coooool"
- Разбор: 'c' (длина 1) -> "c"; серия 'o' (длина 5) -> оставляем 3 'o' -> "...ooo..."; 'l' (длина 1) -> "l"
- Вывод: "coool"
Python-реализация (быстрый готовый вариант) def normalize_runs(K, s): if not s: return "" res = [] i = 0 n = len(s) while i < n: ch = s[i] j = i + 1 while j < n and s[j] == ch: j += 1 run_len = j - i res.append(ch * min(run_len, K)) i = j return "".join(res)
Пример использования
print(normalize_runs(3, "coooool")) # вывод: coool
Если хотите, могу привести тесты на другие примеры или адаптировать решение под конкретный язык программирования.