力扣刷题(第九十七天)
灵感来源
- 保持更新,努力学习
- python脚本学习
密钥格式化
解题思路
- 移除原字符串中的所有破折号,并将小写字母转换为大写。
- 从后向前遍历处理后的字符串,每
K
个字符为一组。 - 最后将各组逆序拼接,并用破折号分隔。
class Solution:def licenseKeyFormatting(self, S: str, K: int) -> str:# 移除所有破折号并转换为大写clean = S.replace('-', '').upper()n = len(clean)if n == 0:return ''# 计算第一个分组的长度first_len = n % Kif first_len == 0:first_len = Kgroups = []# 添加第一个分组groups.append(clean[:first_len])# 从第一个分组后的位置开始,每K个字符为一组for i in range(first_len, n, K):groups.append(clean[i:i+K])# 用破折号连接所有分组return '-'.join(groups)
逐行解释
class Solution:def licenseKeyFormatting(self, S: str, K: int) -> str:# 移除所有破折号并将小写字母转换为大写# 例如:S="a-b-c-d" → clean="ABCD"clean = S.replace('-', '').upper()n = len(clean)# 处理空字符串的特殊情况if n == 0:return ''# 计算第一个分组的长度# 如果总长度能被K整除,第一个分组长度为K;否则为余数first_len = n % Kif first_len == 0:first_len = K# 存储所有分组的列表groups = []# 添加第一个分组(可能比K短)groups.append(clean[:first_len])# 从第一个分组后的位置开始,每K个字符为一组# 例如:clean="ABCDEFG", K=3, first_len=1 → 分组为["A", "BCD", "EFG"]for i in range(first_len, n, K):groups.append(clean[i:i+K])# 用破折号连接所有分组并返回return '-'.join(groups)