Сжатие строки

Средняя
57%
Python 3.12JavaScriptGo 1.17.13Java 21C#C++

Вам дан массив символов chars, состоящий из букв или цифр. Реализуйте алгоритм сжатия данных, который модифицирует исходный массив следующим образом:

  1. Если группа последовательных символов повторяется 1 раз, она остается без изменений.
  2. Если группа повторяется больше 1 раза, символ заменяется на сам символ, за которым следует длина группы.
  3. Возвратите новую длину массива после сжатия.

Примечания:

  1. Группа — это последовательность из одного или нескольких одинаковых символов, расположенных подряд.
  2. Длины группы, превышающие 9, нужно разбивать на отдельные цифры. Например, 12 записывается как ["1","2"].
  3. Модификация массива должна происходить на месте — нельзя выделять дополнительную память для массивов.
  4. После новой длины содержимое массива не имеет значения (система проверит только элементы до этой длины).

Пример 1

Ввод: chars = ["a","a","b","b","c","c","c"]

Вывод: вернуть 6, а первые 6 символов в массиве chars должны быть ["a","2","b","2","c","3"].

Объяснение: группы — "aa", "bb", "ccc". После сжатия получается "a2b2c3".

Пример 2

Ввод: chars = ["a"]

Вывод: вернуть 1, а массив chars остается ["a"].

Объяснение: единственная группа — "a", и она остается без изменений.

Пример 3

Ввод: chars = ["a","b","b","b","b","b","b","b","b","b","b","b","b"]

Вывод: вернуть 4, а первые 4 символа в массиве chars должны быть ["a","b","1","2"].

Объяснение: группы — "a", "bbbbbbbbbbbb". После сжатия получается "ab12".

Ограничения

  • 1 <= chars.length <= 2000
  • chars[i] — буква латинского алфавита (в верхнем или нижнем регистре), цифра или символ.