LeetCode 482 License Key Formatting Solution in Python 3.

LeetCode 482 Solution 32 ms in Python 3

You are given a license key represented by the string s that contains only alphanumeric characters and dashes. You are also given an integer **k**.

Reformat the string s so that each group contains exactly k characters, except the first group that should be smaller than k but must contain at least 1 character.

Groups must be separated by dashes and all characters must be uppercase.

## Analysis

First clean-up the input string s

- Remove all dashes from s,
- Convert s to uppercase.

```
#cleanup the input
chars = s.upper().replace('-','')
charslen = len(chars)
```

Find how many whole sets of k can be found in s.

```
#sets and remainder
pieces = charslen // k
rest = charslen % k
```

Using Modulo we find the remainder after dividing the lenght of s by k.

For the first set, insert the remainder characters lenght and a dash if there are more characters left.

```
#start with remainder
output = chars[:rest]
output+= '-' if rest != 0 else ''
```

Slice the remaining string using a loop thru the sets. i*k is to jump from set to set and +rest is to offset the already used characters.

```
#slice the remaining string into sets
for i in range(pieces):
output += chars[i*k+rest : (i+1)*k+rest] + '-'
output = output[:-1] # remove the last - char
```

Whole Solution Code in Python 3

Code steps

```
class Solution:
def licenseKeyFormatting(self, s: str, k: int) -> str:
"""
Dragos Ion 2021
32 ms solution
Using Mod and Slice
"""
#cleanup the input
chars = s.upper().replace('-','')
charslen = len(chars)
#sets and remainder
pieces = charslen // k
rest = charslen % k
#start with remainder
output = chars[:rest]
output+= '-' if rest != 0 else ''
#slice the remaining string into sets
for i in range(pieces):
output += chars[i*k+rest : (i+1)*k+rest] + '-'
output = output[:-1] # remove the last - char
return output
```