Categories:

Tags:



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