License Key Formatting
Problem
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.
Constraints
1 <= s.length <= 105
s
consists of English letters, digits, and dashes'-'
.1 <= k <= 104
Solution
The problem License Key Formatting
can be solved by iterating the given string from right to left and inserting a dash on every k
alphanumeric characters.
Implementation
class Solution
{
public:
string licenseKeyFormatting(string s, int k)
{
string key;
int count = 0;
for (int i = s.length() - 1; i >= 0; i--)
if (s[i] != '-')
{
if (key.length() % (k + 1) == k)
key += '-';
key += isdigit(s[i]) ? s[i] : toupper(s[i]);
}
reverse(key.begin(), key.end());
return key;
}
};