Skip to content

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))
})()