-
Notifications
You must be signed in to change notification settings - Fork 0
HevaWu/Leetcode
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Sorry, we had to truncate this directory to 1,000 files. 1304 entries were omitted from the list. | ||||
Repository files navigation
// 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: // The length of string S will not exceed 12,000, and K is a positive integer. // String S consists only of alphanumerical characters (a-z and/or A-Z and/or 0-9) and dashes(-). // String S is non-empty. // Solution 1: // check from end of S // remove the first "-" if there it is // convert lowercase char to uppercase char // // Time complexity: O(n) n is S.count // Space comlexity: O(m) m is the returned string.count which should < n class Solution { func licenseKeyFormatting(_ S: String, _ K: Int) -> String { var formatted = String() var kindex = 0 for i in S.indices.reversed() { guard S[i] != "-" else { continue } formatted.insert(S[i], at: formatted.startIndex) kindex += 1 if kindex == K { // add dash formatted.insert("-", at: formatted.startIndex) kindex = 0 } } // remove the first "-" if needed if formatted.first == "-" { formatted.removeFirst() } // convert lower char to uppercased char return String(formatted).uppercased() } // check and return the converted chars // a-z -> A-Z // A-Z -> keep // 0-9 -> keep // use char.uppercased() }