// Необходимо реализовать функцию для сжатия строки с использованием алгоритма run-length encoding.

RLE заменяет каждую непрерывную серию одинаковых символов парой «длина + символ». В Go для Unicode удобно проходить строку по rune.

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

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

RLE заменяет каждую непрерывную серию одинаковых символов парой «длина + символ». В Go для Unicode удобно проходить строку по rune.

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

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

Условие

// Необходимо реализовать функцию для сжатия строки с использованием алгоритма run-length encoding. // Если встречается серия одинаковых значений, то она заменяется на длину серии и значение.

func Encode(s string) string { panic("not implemented") }

Ответ

RLE заменяет каждую непрерывную серию одинаковых символов парой «длина + символ». В Go для Unicode удобно проходить строку по rune.

func Encode(s string) string {
    var out strings.Builder
    var prev rune
    count := 0
    for _, r := range s {
        if count > 0 && r != prev {
            fmt.Fprintf(&out, "%d%c", count, prev)
            count = 0
        }
        prev = r
        count++
    }
    if count > 0 {
        fmt.Fprintf(&out, "%d%c", count, prev)
    }
    return out.String()
}

Нужны fmt и strings. Для aaabb получится 3a2b, для пустой строки — пустая строка. Здесь даже одиночный символ получает префикс 1. Если алфавит включает цифры, для однозначного декодирования потребуется разделитель или экранирование; формат задачи этого не задаёт.

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

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

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

Подробнее