Задача
Дан массив символов chars. Сожмите его in-place: символ + количество повторов (>1). Верните новую длину.
Примеры
Пример 1
Input: chars = ["a","a","b","b","c","c","c"]
Output: 6
Пояснение
Группы “aa”, “bb”, “ccc” сжимаются в “a2b2c3”. Первые 6 символов: [“a”,“2”,“b”,“2”,“c”,“3”].
Пример 2
Input: chars = ["a"]
Output: 1
Пояснение
Единственная группа “a” не сжимается (один символ).
Пример 3
Input: chars = ["a","b","b","b","b","b","b","b","b","b","b","b","b"]
Output: 4
Пояснение
Группы “a” и “bbbbbbbbbbbb” сжимаются в “ab12”. Первые 4 символа: [“a”,“b”,“1”,“2”].
Решение
Решение
// Time Complexity: O(n) — один проход по массиву // Space Complexity: O(1) — модификация массива на месте, без доп. структур var compress = function(chars) { .push(' '); // сентинель — чтобы корректно обработать последнюю группу let slow = 0; // указатель записи (и финальная длина) let count = 1; // счётчик повторов текущего символа for (let fast = 1; fast < chars.length; fast++) { if (chars[fast] === chars[slow]) { count++; continue; } // Символ изменился — записываем результат if (count === 1) { slow++; chars[slow] = chars[fast]; } else { // Записываем цифры счётчика (e.g. 12 → '1', '2') for (const c of count.toString()) { slow++; chars[slow] = c; } slow++; chars[slow] = chars[fast]; count = 1; } } return slow; };