Программирование · 8 класс Задача №3480914
А
А
Задача понятна: ограничить каждую максимальную серию одинаковых символов в строке S длиной не более K. Порядок символов не меняем, целые серии не удаляем, просто обрезаем их до максимальной длины K.
Пошаговый разбор решения
- Идём по строке S слева направо и считаем длину текущей серии одинаковых символов.
- Когда встречается другой символ, дописываем в результат текущую серию, но не более K повторов: повторяем текущий символ min(cnt, K) раз.
- Затем начинаем считать новую серию для нового символа.
- После цикла дописываем последнюю серию тоже с ограничением длины K.
- Временная сложность: O(|S|), памяти требуется O(|S|) на результат.
Пример (для понимания)
- Ввод: K = 2, S = "uraaSuperr"
- Разбор: серии: "uu", "r", "aa", "S", "u", "p", "e", "rr"
- Каждая серия уже длины ≤ 2, поэтому результат: "uuraaSuperr" (ничего не обрезаем). Если бы была серия длиннее K, она бы обрезалась до K.
Питоновская реализация (Python 3)
def cap_runs(K, S):
if not S:
return ""
res = []
cur = S[0]
cnt = 1
for ch in S[1:]:
if ch == cur:
cnt += 1
else:
res.append(cur * min(cnt, K))
cur = ch
cnt = 1
# добавить последнюю серию
res.append(cur * min(cnt, K))
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 ""
sys.stdout.write(cap_runs(K, S))
if __name__ == "__main__":
main()
Как запускать
- Ввод: две строки
- Первая строка содержит K (целое число > 1)
- Вторая строка содержит строку S из латинских букв
- Вывод: строка S', где каждая максимальная серия одинаковых символов не длиннее K
Пример теста
- Ввод: 2 ur aaS uperr
- Вывод: uuraaSuperr
Примечание
- Если в примере задачи указано другое поведение (например, обрезание некоторых серий иначе), уточните входные данные; базовый алгоритм остаётся верным: обрезаем каждую серию до максимальной длины K, не удаляя её целиком и не меняя порядок символов.