You are given a license key represented as a string S which consists only alphanumeric character and dashes. The string is separated into N+1 groups by N dashes.
    Given a number K, we would want to reformat the strings 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 all lowercase letters should be converted to uppercase.
    Given a non-empty string S and a number K, format the string according to the rules described above.
    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.Note:

    1. The length of string S will not exceed 12,000, and K is a positive integer.
    2. String S consists only of alphanumerical characters (a-z and/or A-Z and/or 0-9) and dashes(-).
    3. String S is non-empty.

    Runtime: 12 ms, faster than 94.31% of C++ online submissions for License Key Formatting.

    1. class Solution {
    2. public:
    3. string licenseKeyFormatting(string S, int K) {
    4. string res;
    5. for (auto i = S.rbegin(); i < S.rend(); i++) {
    6. if (*i != '-') { // ignore '-' in original string
    7. if (res.size() % (K + 1) == K) { // every (K+1)th char is '-' from tail
    8. res += '-';
    9. }
    10. res += toupper(*i);
    11. }
    12. }
    13. reverse(res.begin(), res.end());
    14. return res;
    15. }
    16. };