Дана строка из заглавных латинских букв. Сожмите её: каждую серию одинаковых
подряд идущих букв замените буквой и длиной серии. Серию длины 1 пишите просто
буквой, без единицы. Если в строке есть что-то кроме A–Z, верните ошибку,
для которой errors.Is(err, ErrInvalidChar).
var ErrInvalidChar = errors.New("invalid character")
// Compress сжимает s: "XYYZZZWWWW" → "XY2Z3W4".
func Compress(s string) (string, error)
Примеры
"XYYZZZWWWW" → "XY2Z3W4"
"AAAAAAAAAAAB" → "A11B" // длина серии может быть многозначной
"ABA" → "ABA"
"" → ""
"AbC" → ошибка ErrInvalidChar
Ограничения: 0 ≤ len(s) ≤ 10⁶. Ожидается O(n) по времени — в том числе
на строке без повторов, где ответ такой же длины, как вход.
Устно: как написать обратную функцию Decompress? Что делать, если в исходной
строке могут быть цифры?
Разбор и эталонное решение — после своей попытки: на собеседовании подсказок не будет.
Сначала попробуй сам — подсказки не дают готовый ответ.