Пройдите по строке, объединяя только соседние одинаковые символы. Добавляйте количество, если оно больше единицы; в примере условия ошибочно указаны длины нескольких серий.
Сжатие строки алгоритмом Run‑Length Encoding
Пройдите по строке, объединяя только соседние одинаковые символы. Добавляйте количество, если оно больше единицы; в примере условия ошибочно указаны длины нескольких серий.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо написать функцию, которая принимает строку и возвращает её представление после применения алгоритма Run‑Length Encoding (RLE). Последовательные одинаковые символы заменяются на сам символ, за которым следует количество его повторений. Символ, встречающийся единожды, оставляется без добавления числа. К примеру, строка AAAABBCCXYZDDDDEEEFFFAAAAABBBBBBBBBBBBBBBBBBBBBBBB должна превратиться в A4B3C2XYZD4E3F3A6B28
Ответ
Пройдите по строке, объединяя только соседние одинаковые символы. Добавляйте количество, если оно больше единицы; в примере условия ошибочно указаны длины нескольких серий.
Реализация на Python:
def rle(text):
if not text:
return ''
result = []
previous, count = text[0], 1
for char in text[1:]:
if char == previous:
count += 1
else:
result.append(previous + (str(count) if count > 1 else ''))
previous, count = char, 1
result.append(previous + (str(count) if count > 1 else ''))
return ''.join(result)
Именно приведённая входная строка даёт A4B2C2XYZD4E3F3A5B24, не указанный результат. Время линейно по входу и выходу. Для строк с цифрами такой формат требует экранирования или разделителей, если нужна однозначная распаковка.