LeetCode License Key Formatting
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.
First Attempt:
class Solution { public String licenseKeyFormatting(String S, int K) { if(S==null || S.length()==0){ return null; } String result = ""; String[] tmp = S.split("-"); String res = ""; int sum = 0; for(int i = 0; i<tmp.length; i++){ sum = sum+ tmp[i].length(); res = res + tmp[i].toUpperCase(); } int i = sum % K; int k = sum/K ; //res = res.toUpperCase(); result = result + res.substring(0,i); if(i!=0 && k!=0){ result = result +"-"; } String tmp_res = res.substring(i,res.length()); //System.out.println(sum + " "+ i+" c "+ tmp_res+" d "+ k); for(int j = 1; j<= k; j++ ){ result = result + tmp_res.substring(K*(j-1), K*j); if(j != k ){ result = result +"-"; } // System.out.println( tmp_res.substring(K*(j-1), K*j)); } return result; } }
Accepted
class Solution { public String licenseKeyFormatting(String S, int K) { if(S==null || S.length()==0){ return null; } S = S.replaceAll("[-]", ""); S = S.toUpperCase(); StringBuilder sb = new StringBuilder(); sb.append(S); int i=sb.length()-K; while(i>0) { sb.insert(i, '-'); i = i-K; } return sb.toString(); } }