[leetcode]鍵フォーマット[javascript]


2019年2月18日鍵フォーマット
https://leetcode-cn.com/problems/license-key-formatting/
説明
鍵文字列Sを指定します.文字、数字、および「-」だけが含まれます.N個の‘-’は文字列をN+1グループに分けた.数値Kを指定して、文字列を再フォーマットします.最初のグループ以外に、各グループはK文字を含み、最初のグループは少なくとも1文字を含みます.二つのグループの間は「-」で区切られ、すべての小文字を大文字に変換します.空でない文字列Sと数字Kを指定して、上記の規則に従ってフォーマットします.
例1:
  :S = "5F3Z-2e-9-w", K = 4

  :"5F3Z-2E9W"

  :    S         ,    4    ;
       ,            。
例2:
  :S = "2-5g-3-J", K = 2

  :"2-5G-3J"

  :    S      3    ,         ,                ,       2    。
ヒント:
  • Sの長さは12,000を超えず、Kは正の整数
  • である.
  • Sは、アルファベットの数字(a−z、A−Z、0−9)と、ダッシュ記号'-'
  • だけを含む.
  • S非空
  • 分析
    まず中スライドをフィルタして、大文字にします.最初の特殊処理を、残りはK値sliceによって中ラインを追加すればいいです.
    /**
     * @param {string} S
     * @param {number} K
     * @return {string}
     */
    var licenseKeyFormatting = function(S, K) {
      S = S.replace(/-/g, '').toUpperCase()
      let len = S.length
      let first = len % K, parts = first ? parseInt(len / K) + 1 : parseInt(len / K), res = ''
      for (let i = 0; i < parts; i++) {
        if (i === 0) {
          res += first ? S.slice(0, first) : S.slice(0, K)
        } else {
          res += first ? S.slice(first + K * (i - 1), first + K * i) : S.slice(K * i, K * (i + 1))
        }
        if (i < parts - 1) {
          res += '-'
        }
      }
      return res
    };