Я пытаюсь решить этот конкретный вопрос об алгоритме:
Вам дан лицензионный ключ, представленный в виде строки S, которая состоит только из букв c и букв. Строка разделена на N + 1 группы с помощью N штрихов.
Учитывая число K, мы хотели бы переформатировать строки так, чтобы каждая группа содержала ровно K символов, за исключением первой группы, которая может быть короче, чем K, но все равно должен содержать хотя бы один символ. Кроме того, между двумя группами должен быть вставлен символ da sh, а все строчные буквы должны быть преобразованы в верхний регистр.
Если задана непустая строка S и число K, отформатируйте строку в соответствии с описанными правилами выше.
Пример 1: Вход: S = "5F3Z-2e-9-w", K = 4
Выход: "5F3Z-2E9W"
Объяснение: The Строка S была разбита на две части, каждая часть имеет 4 символа. Обратите внимание, что две дополнительные тире не нужны и могут быть удалены. Пример 2: Ввод: S = "2-5g-3-J", K = 2
Выход: "2-5G-3J"
Объяснение: Строка S разбита на три части, каждая часть имеет 2 символа, кроме первой, так как она может быть короче, как указано выше. Примечание. Длина строки S не будет превышать 12 000, а K - положительное целое число. Строка S состоит только из буквенно-цифровых символов (az и / или AZ и / или 0-9) и тире (-). Строка S не пуста.
Я написал следующий код:
const licenseKeyFormatting = (S, K) => {
//convert to array, remove special characters, and capitalize
let s = [...S.replace(/\W/g, '').toUpperCase()]
let pos = 1
//from end of array add '-' for every K
for (let i = s.length - 1; i > 0; i--) {
if (pos === K) {
s.splice(i, 0, '-')
pos = 1
i-- //re-index bc adding to the array
}
pos++
}
return s
}
console.log(licenseKeyFormatting("5F3Z-2e-9-w", 4)) //5F3Z-2E9W
console.log(licenseKeyFormatting("2-5g-3-J", 2)) //2-5G-3J
console.log(licenseKeyFormatting("a-a-a-a-", 1)) // this test case fails should be A-A-A-A, I am getting AAA-A
Я почти уверен, что недостаток в моих логиках c связан с переиндексацией, но Я не могу понять, как решить эту проблему.