RLE кодирует каждую непрерывную группу одинаковых символов парой «символ + число». Один проход даёт O(n) по длине строки; одинаковые символы в разных группах не объединяются.
Реализуйте строковое сжатие: заменить подряд идущие одинаковые символы на символ и количество его повторений.
RLE кодирует каждую непрерывную группу одинаковых символов парой «символ + число». Один проход даёт O(n) по длине строки; одинаковые символы в разных группах не объединяются.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
RLE кодирует каждую непрерывную группу одинаковых символов парой «символ + число». Один проход даёт O(n) по длине строки; одинаковые символы в разных группах не объединяются.
Вариант с записью количества даже для одиночного символа:
from itertools import groupby
def compress(text):
return "".join(
char + str(sum(1 for _ in group))
for char, group in groupby(text)
)
compress('aaabbc') вернёт 'a3b2c1', пустая строка — ''. Такое представление не всегда короче исходного. Если вход может содержать цифры, для однозначного восстановления потребуется дополнительное правило разделения или экранирования.