Welcome to Subscribe On Youtube
482. License Key Formatting
Description
You are given a license key represented as a string s
that consists of only alphanumeric characters and dashes. The string is separated into n + 1
groups by n
dashes. You are also given an integer k
.
We want to reformat the string s
such that each group contains exactly k
characters, except for the first group, which could be shorter than k
but still must contain at least one character. Furthermore, there must be a dash inserted between two groups, and you should convert all lowercase letters to uppercase.
Return the reformatted license key.
Example 1:
Input: s = "5F3Z-2e-9-w", k = 4 Output: "5F3Z-2E9W" Explanation: The string s has been split into two parts, each part has 4 characters. Note that the two extra dashes are not needed and can be removed.
Example 2:
Input: s = "2-5g-3-J", k = 2 Output: "2-5G-3J" Explanation: The string s has been split into three parts, each part has 2 characters except the first part as it could be shorter as mentioned above.
Constraints:
1 <= s.length <= 105
s
consists of English letters, digits, and dashes'-'
.1 <= k <= 104
Solutions
-
class Solution { public String licenseKeyFormatting(String s, int k) { s = s.replace("-", "").toUpperCase(); StringBuilder sb = new StringBuilder(); int t = 0; int cnt = s.length() % k; if (cnt == 0) { cnt = k; } for (int i = 0; i < s.length(); ++i) { sb.append(s.charAt(i)); ++t; if (t == cnt) { t = 0; cnt = k; if (i != s.length() - 1) { sb.append('-'); } } } return sb.toString(); } }
-
class Solution { public: string licenseKeyFormatting(string s, int k) { string ss = ""; for (char c : s) { if (c == '-') continue; if ('a' <= c && c <= 'z') c += 'A' - 'a'; ss += c; } int cnt = ss.size() % k; if (cnt == 0) cnt = k; int t = 0; string res = ""; for (int i = 0; i < ss.size(); ++i) { res += ss[i]; ++t; if (t == cnt) { t = 0; cnt = k; if (i != ss.size() - 1) res += '-'; } } return res; } };
-
class Solution: def licenseKeyFormatting(self, s: str, k: int) -> str: s = s.replace('-', '').upper() res = [] cnt = (len(s) % k) or k t = 0 for i, c in enumerate(s): res.append(c) t += 1 if t == cnt: t = 0 cnt = k if i != len(s) - 1: res.append('-') return ''.join(res)
-
func licenseKeyFormatting(s string, k int) string { s = strings.ReplaceAll(s, "-", "") cnt := len(s) % k if cnt == 0 { cnt = k } t := 0 res := []byte{} for i, c := range s { res = append(res, byte(unicode.ToUpper(c))) t++ if t == cnt { t = 0 cnt = k if i != len(s)-1 { res = append(res, byte('-')) } } } return string(res) }
-
function licenseKeyFormatting(s: string, k: number): string { const n = s.length; let cnt = (n - (s.match(/-/g) || []).length) % k || k; const ans: string[] = []; for (let i = 0; i < n; i++) { const c = s[i]; if (c === '-') { continue; } ans.push(c.toUpperCase()); if (--cnt === 0) { cnt = k; if (i !== n - 1) { ans.push('-'); } } } while (ans.at(-1) === '-') { ans.pop(); } return ans.join(''); }