Пройдите строку по сериям одинаковых символов и добавляйте длину серии только тогда, когда она больше одного.
Напишите функцию, которая сжимает строку из букв: последовательность повторяющихся символов заменяется символом и числом повторений, при этом для одиночных символов число не добавляется.
Пройдите строку по сериям одинаковых символов и добавляйте длину серии только тогда, когда она больше одного.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Пройдите строку по сериям одинаковых символов и добавляйте длину серии только тогда, когда она больше одного.
Вариант для строк из букв, учитывающий Unicode code points:
function compress(text) {
const parts = [];
let previous, count = 0;
const flush = () => {
if (count) parts.push(previous + (count > 1 ? count : ''));
};
for (const char of text) {
if (char === previous) count++;
else { flush(); previous = char; count = 1; }
}
flush();
return parts.join('');
}
Например, aaabbc превращается в a3b2c, пустая строка остаётся пустой. Время O(n); для произвольных цифр во входе понадобился бы отдельный однозначный формат кодирования.