Задача и решение
Что нужно сделать: для строки S, состоящей из латинских букв, привести каждый максимальный участок повторяющегося символа к длине не более K. То есть в каждом блоке одинаковых символов сохраняем не более первых K повторений, остальные пропускаем. Порядок символов не меняем, ни одну серию целиком не удаляем (оставляем максимум K символов из каждой серии).
Подход: пройти по строке слева направо, считать текущую серию одинаковых символов. Если текущий символ такой же, как предыдущий, увеличить счётчик; иначе начать новую серию и сбросить счётчик. Если счётчик не превышает K, дописать символ к результату, иначе пропустить.
Сложность: время O(n), память O(n) для итоговой строки.
Пример: пусть K = 3, S = "aaabbbbccddddd"
Результат: "aaabbbccdddd" (первые 3 из каждой серии: a(3), b(3), c(2), d(4) -> но ограничиваем до 3, значит "aaabbbccddd" если дублируются, в общем тестовый пример можно подставлять свои).
Пример кода на Python 3
def normalize_runs(K, S): res = [] prev = None count = 0 for ch in S: if ch == prev: count += 1 else: prev = ch count = 1 if count <= K: res.append(ch) return ''.join(res)
def main(): import sys data = sys.stdin.read().splitlines() if not data: return K = int(data[0].strip()) S = data[1].strip() if len(data) > 1 else "" print(normalize_runs(K, S))
if name == "main": main()
Как использовать:
- Ввод первого аргумента — K (целое число > 1).
- Ввод второй строки — S (только латинские буквы, без пробелов).
- Выводится строка S' с ограничением длины любых подряд идущих одинаковых символов до K.
Дополнительные заметки:
- Если K >= длина текущей серии, серия остаётся без изменений.
- Если серия длиннее K, лишние символы удаляются (остаются только первые K повторений). Порядок символов и оставшиеся части строки сохраняются.