«Сжатие» исходной последовательности символов
Написать функцию, входным параметром которой является строка. Функция должна осуществлять «сжатие» исходной последовательности символов: каждая подпоследовательность, состоящая из более 4-х вхождений одного и того же символа, заменяется на текст x(k), где x – символ, а k – строка, являющаяся записью числа вхождений символа x в исходную последовательность. Число вхождений одного символа может быть как менее, так и более 9.
Есть набросок кода, но проблема в том, что выводит строку с любым кол-вом вхождений символов. Например, если строка "aaabbbb" - результат "а(3)b(4)". А нужно "aaabbbb", т.к символы не повторяются > 4 раз.
Ещё, например у нас есть строка "bbbbbccddddd", то должно получиться "b(5)ccd(5)"
НЕ ИСПОЛЬЗОВАТЬ СТРОКОВЫЕ МЕТОДЫ!
let str = "bbbbbccddddd";
let mystr = "";
let count = 1;
let last = str[0];
function Compressed(string){
for (let i = 1; i < str.length; i++) {
if (str[i] == last) { // Находим повторяющийся символ
count++;
} else { // Вставляем счетчик символа и обновляем последний символ
mystr += last + "(" + count + ")";
last = str[i];
count = 1;
}
}
return mystr + last + "(" + count + ")";
}
console.log(Compressed(str));
Ответы (1 шт):
Как вариант (пытался свести к минимуму количество вспомогательных переменных):
function Compressed(source){
let compressed = '';
let chunk = '';
for (const char of source) {
if (char === chunk[0]) {
chunk += char;
} else {
compressed += chunk.length <= 4 ? chunk : `${chunk[0]}(${chunk.length})`;
chunk = char;
}
}
compressed += chunk.length <= 4 ? chunk : `${chunk[0]}(${chunk.length})`;
return compressed;
}
console.log(Compressed('abbbbcccccdd'));