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

All Problems

All Solutions