482. 密钥格式化
js
;(function () {
/**
* 482. 密钥格式化
* 给定一个许可密钥字符串 s,仅由字母、数字字符和破折号组成。字符串由 n 个破折号分成 n + 1 组。你也会得到一个整数 k 。
* 我们想要重新格式化字符串 s,使每一组包含 k 个字符,除了第一组,它可以比 k 短,但仍然必须包含至少一个字符。
* 此外,两组之间必须插入破折号,并且应该将所有小写字母转换为大写字母。
* 返回 重新格式化的许可密钥 。
*
* 输入:S = "5F3Z-2e-9-w", k = 4
* 输出:"5F3Z-2E9W"
* 解释:字符串 S 被分成了两个部分,每部分 4 个字符;注意,两个额外的破折号需要删掉。
*
* 输入:S = "2-5g-3-J", k = 2
* 输出:"2-5G-3J"
* 解释:字符串 S 被分成了 3 个部分,按照前面的规则描述,第一部分的字符可以少于给定的数量,其余部分皆为 2 个字符。
*
*
*/
function licenseKeyFormatting(s: string, k: number): string {
// 方法一:
let ans: string[] = []
// 1. 原字符串 - 截取合并
let newS: string = s.split('-').join('')
// 2. 从右往左截取【newS】,以 k 为一组
let num: number = 0
let tempGroup: string = ''
for (let i = newS.length - 1; i >= 0; i--) {
num++
tempGroup = newS[i].toUpperCase() + tempGroup
if (num === k) {
ans.push(tempGroup)
num = 0
tempGroup = ''
}
}
tempGroup && ans.push(tempGroup)
return ans.reverse().join('-')
// 方法二:
}
const S = '5F3Z-2e-9-w',
k = 4
const S1 = '2-5g-3-J',
k1 = 2
console.log(licenseKeyFormatting(S, k))
console.log(licenseKeyFormatting(S1, k1))
})()