Для формата «символ, затем необязательное число повторений» считывайте символ и всю последовательность цифр после него; без числа используйте единицу.
Реализуйте функцию RLD (run-length decoding), обратную RLE: раскройте сжатую строку, повторяя символ указанное число раз; одиночные символы оставляйте без изменений.
Для формата «символ, затем необязательное число повторений» считывайте символ и всю последовательность цифр после него; без числа используйте единицу.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Для формата «символ, затем необязательное число повторений» считывайте символ и всю последовательность цифр после него; без числа используйте единицу.
Примем, что исходные символы не являются цифрами, а число повторов положительно. Например, A3BC2 → AAABCC. У примера есть защитный предел длины результата в 1 000 000 UTF-16 единиц.
function rld(text) {
const pattern = /([^0-9])([0-9]*)/uy;
let result = '';
while (pattern.lastIndex < text.length) {
const match = pattern.exec(text);
if (!match) throw new Error('Invalid RLD');
const count = match[2] === '' ? 1 : Number(match[2]);
if (!Number.isSafeInteger(count) || count < 1 ||
result.length + match[1].length * count > 1000000) {
throw new RangeError('Invalid count or result too large');
}
result += match[1].repeat(count);
}
return result;
}
Для кодирования самих цифр нужно дополнительно определить экранирование или разделитель; без такого договора формат неоднозначен.