Пошук уроків, статей та іншого контенту
Замініть послідовності однакових символів на символ і кількість повторів.
Напишіть функцію solve(str), яка стискає рядок методом Run-Length Encoding: кожна послідовність однакових символів, що йдуть підряд, замінюється на сам символ і кількість його повторень. Якщо стиснутий рядок не коротший за оригінал, поверніть оригінальний рядок без змін.
Приклади
Вхід: "aaabbbccd"
Вихід: "a3b3c2d1"
Вхід: "abc"
Вихід: "abc"
стиснута версія "a1b1c1" (6 символів) не коротша за оригінал (3 символи), тому повертається оригінал
Вхід: "aabcccccaaa"
Вихід: "a2b1c5a3"
Обмеження: 1 ≤ str.length ≤ 1000, лише малі латинські літери
Ваше рішення
Підказки
Пройдіться по рядку, рахуючи, скільки разів підряд повторюється поточний символ, перш ніж перейти до наступного.
Накопичуйте результат як рядок: символ + кількість, щоразу коли поточний символ відрізняється від наступного (або досягнуто кінця рядка).
Наприкінці порівняйте довжину зібраного результату з довжиною оригіналу — поверніть коротший.
function solve(str) {
let compressed = "";
let count = 1;
for (let i = 0; i < str.length; i++) {
if (str[i] === str[i + 1]) {
count++;
} else {
compressed += str[i] + count;
count = 1;
}
}
return compressed.length < str.length ? compressed : str;
}Цикл порівнює кожен символ із наступним: поки вони однакові, лічильник росте; щойно символи відрізняються (або це останній символ рядка), у результат дописується символ і накопичена кількість.