Answer
t.me/js_testОтвет:
const updateLicenseKeyFormat = (s, k) => {
let letterCount = s.replace(/\-/gi, '').length;
const result = [];
let curK = 0;
for (let i = s.length - 1; i >= 0; i--) {
// время поставить '-'
if (curK == k && letterCount > 0) {
result.push('-');
curK = 0;
}
// иначе считаем текущий символ
if (s[i] != '-') {
result.push(s[i].toUpperCase());
curK++;
letterCount--;
}
}
return result.reverse().join('');
};
Обьяснение:
Алгоритм довольно простой: главная особенность решения в том, что мы парсим строку с конца, т.к. по условиям задачи нам необходимо оставить 1й блок с K символов или меньше, смотрите 2й пример.
Все детали реализации смотрите в коде!
Код для проверки:
const updateLicenseKeyFormat = (s, k) => {
let letterCount = s.replace(/\-/gi, '').length;
const result = [];
let curK = 0;
for (let i = s.length - 1; i >= 0; i--) {
// время поставить '-'
if (curK == k && letterCount > 0) {
result.push('-');
curK = 0;
}
// иначе считаем текущий символ
if (s[i] != '-') {
result.push(s[i].toUpperCase());
curK++;
letterCount--;
}
}
return result.reverse().join('');
};
console.log(updateLicenseKeyFormat('5F3Z-2e-9-w', 4)); // 5F3Z-2E9W
console.log(updateLicenseKeyFormat('2-5g-3-J', 2)); // 2-5G-3J