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:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | 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(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步