Answer

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

Report Page