[LeetCode] 482. 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.
给一个字符串的注册码S,按要求对注册码进行格式化,每四个字符后面跟一个短横杠,每一部分的长度为K,第一部分长度可以小于K,所有字母必须是大写的。
解法:用数组记录字符,从后往前循环字符串,当前字符不是短横杠,就变大写加入数组,每隔四个字母加一个短横杠,最后在转换成字符串。
最重要的是判断4个字符的方法: if len(res) % (K + 1) == K
Java:
1 2 3 4 5 6 7 8 9 10 11 | class Solution { public String licenseKeyFormatting(String S, int K) { StringBuilder sb = new StringBuilder(); for ( int i = S.length() - 1 ; i >= 0 ; i--) { if (S.charAt(i) != '-' ) { sb.append(sb.length() % (K + 1 ) == K ? "-" : "" ).append(S.charAt(i)); } } return sb.reverse().toString().toUpperCase(); } } |
Java:
1 2 3 4 5 6 7 | public String licenseKeyFormatting(String s, int k) { StringBuilder sb = new StringBuilder(); for ( int i = s.length() - 1 ; i >= 0 ; i--) if (s.charAt(i) != '-' ) sb.append(sb.length() % (k + 1 ) == k ? '-' : "" ).append(s.charAt(i)); return sb.reverse().toString().toUpperCase(); } |
Python: wo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Solution( object ): def licenseKeyFormatting( self , S, K): """ :type S: str :type K: int :rtype: str """ res = [] for i in reversed ( range ( len (S))): if S[i] ! = '-' : if len (res) % (K + 1 ) = = K: res.append( '-' ) res.append(S[i].upper()) return ''.join(s for s in reversed (res)) |
Python: wo
1 2 3 4 5 6 7 8 9 10 | class Solution( object ): def licenseKeyFormatting( self , S, K): res = [] for c in reversed (S): if c ! = '-' : if len (res) % (K + 1 ) = = K: res.append( '-' ) res.append(c.upper()) return ''.join(r for r in reversed (res)) |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class Solution( object ): def licenseKeyFormatting( self , S, K): """ :type S: str :type K: int :rtype: str """ S = S.upper().replace( '-' ,'') size = len (S) s1 = K if size % K = = 0 else size % K res = S[:s1] while s1<size: res + = '-' + S[s1:s1 + K] s1 + = K return res |
Python:
1 2 3 4 5 6 7 8 9 | class Solution: def licenseKeyFormatting( self , S, K): """ :type S: str :type K: int :rtype: str """ S = S.replace( "-" , "").upper()[:: - 1 ] return '-' .join(S[i:i + K] for i in range ( 0 , len (S), K))[:: - 1 ] |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 | class Solution: def licenseKeyFormatting( self , S, K): """ :type S: str :type K: int :rtype: str """ def chunks(l, n): for i in range ( 0 , len (l), n): yield l[i:i + n] s = S[:: - 1 ].upper().replace( '-' , '') return '-' .join( list (chunks(s, K)))[:: - 1 ] |
C++:
1 2 3 4 5 6 7 8 9 10 11 12 | class Solution { public : string licenseKeyFormatting(string S, int K) { string res = "" ; for ( int i = ( int )S.size() - 1; i >= 0; --i) { if (S[i] != '-' ) { ((res.size() % (K + 1) - K) ? res : res += '-' ) += toupper (S[i]); } } return string(res.rbegin(), res.rend()); } }; |
All LeetCode Questions List 题目汇总
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步