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