Реализуйте RLE-сжатие строки: дан массив символов английского алфавита, нужно сжать его так, чтобы повторяющийся символ записывался один раз, а за ним — количество повторений. Например: AAAABBBAAA → A4B3A3.

Просматривайте символы слева направо, считая длину текущей серии. При смене символа добавляйте предыдущий символ и счётчик; после цикла обязательно сохраните последнюю серию.

Короткий ответ

Что ответить на собеседовании

Просматривайте символы слева направо, считая длину текущей серии. При смене символа добавляйте предыдущий символ и счётчик; после цикла обязательно сохраните последнюю серию.

Подробный разбор

Ответ с пояснениями

Просматривайте символы слева направо, считая длину текущей серии. При смене символа добавляйте предыдущий символ и счётчик; после цикла обязательно сохраните последнюю серию.

Решение для строки или списка символов:

def rle(chars):
    if not chars:
        return ""
    out = []
    current = chars[0]
    count = 1
    for char in chars[1:]:
        if char == current:
            count += 1
        else:
            out.extend([current, str(count)])
            current, count = char, 1
    out.extend([current, str(count)])
    return "".join(out)

AAAABBBAAA даёт A4B3A3. Время O(n), память результата O(n); здесь срез также занимает дополнительную память. Это не вариант in-place.

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

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

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

Подробнее