Сжатие строки алгоритмом 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, не указанный результат. Время линейно по входу и выходу. Для строк с цифрами такой формат требует экранирования или разделителей, если нужна однозначная распаковка.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее