0️⃣python数据结构与算法学习路线
学习内容:
- 基本算法:枚举、排序、搜索、递归、分治、优先搜索、贪心、双指针、动态规划等…
- 数据结构:字符串(string)、列表(list)、元组(tuple)、字典(dictionary)、集合(set)、数组、队列、栈、树、图、堆等…
题目:
有一个密钥字符串 S ,只包含字母,数字以及 ‘-’(破折号)。其中, N 个 ‘-’ 将字符串分成了 N+1 组。
给你一个数字 K,请你重新格式化字符串,使每个分组恰好包含 K 个字符。特别地,第一个分组包含的字符个数必须小于等于 K,但至少要包含 1 个字符。两个分组之间需要用 ‘-’(破折号)隔开,并且将所有的小写字母转换为大写字母。
输入输出:
输入:S = “5F3Z-2e-9-w”, K = 4
输出:“5F3Z-2E9W”
解释:字符串 S 被分成了两个部分,每部分 4 个字符;
注意,两个额外的破折号需要删掉。
解题思路:
- 去除s中所有的 - ,将字母变成大写
- 反向读取处理好的 s
- 添加 k 个字符之后添加一个 -
算法实现:
class Solution(object):
def licenseKeyFormatting(self, S, K):
s = S.upper().replace('-','')[::-1] # 记去掉-的方法,re也可以去除
res = ''
for i in range(len(s)):
if i%K == 0 and i!=0: res = '-' + res
res = s[i] + res
return res
出现问题:
- 去掉什么都可以用.replace(’-’,’’)
- 反向读取 s 可以避免处理长度不满k的倍数的问题