Friday, March 6, 2020

482. License Key Formatting -E

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.

A:

class Solution {
public:
    string licenseKeyFormatting(string S, int K) {
        int count = 0;  // count of chars in current group
        vector<char> V;
        for(int i= S.length()-1;i>=0;--i)
        {
            char ch = S[i];
            if(ch == '-')
                continue;
            V.push_back(toupper(ch));
            ++count;
            if(count == K)
            {
                V.push_back('-');
                count =0;
            }        
        }
        if(not V.empty() && V.back() =='-') //Calling vector.back() on an empty container causes undefined behavior.

            V.pop_back();
        string res(V.rbegin(), V.rend());
        return res;
    }
};

Learned:

vector.back()   这类的函数, //Calling vector.back() on an empty container causes undefined behavior.





No comments:

Post a Comment