题目
1 每个字符串跟着一个数字,表示字符串的重复次数
2 先按照数字排序,再按照字符串排序,从小到大,
3
4 例:
5 c2a1
6 结果
7 acc
8
9 例:
10 c10aa2
11
思路:
1 先将字符串和数字区分
2 https://www.cnblogs.com/whycai/p/14411674.html
3
4 排序
5 https://www.cnblogs.com/whycai/p/14412133.html
6
7
代码如下:
1 # @Author :whyCai
2 # @Time :2021/2/18 16:15
3
4 class Solution:
5 def returnStr(self, s) -> str:
6
7 #1.取将字符和数字拆分
8 numDict = {} #最终结果
9 num = 0 #取数值的起始值
10 for i in range(len(s)):
11 #判断是否是数字
12 if s[i].isdigit() :
13 # 如果第一个是数字,默认key 是 '0',value是该数字
14 if i == 0:
15 numDict['0'] = s[i]
16 #判断上一个是否是数字,如果是,将上一个值 + 该数字
17 if s[i-1].isdigit() :
18 numDict[list(numDict)[-1]] = numDict[list(numDict)[-1]] + s[i]
19 # 如果上一个不是数字,key为之前的字符,value是该数字
20 else:
21 numDict[s[num:i]] = s[i]
22 num = i + 1
23
24 # 2.排序
25 # 按照key排序,从小到大
26 dKey = sorted(numDict.items(), key=lambda i: i[0], reverse=False)
27 # 转成字典
28 dKey = dict(dKey)
29 # 按照value排序,从小到大
30 dValue = sorted(dKey.items(), key=lambda i: int(i[1]), reverse=False)
31 numDictEnd = dict(dValue)
32
33 #3.输出最终结果
34 numDictEndList = list(numDictEnd)
35 strEnd = ''
36 for i in range(len(numDictEndList)):
37 num = numDictEndList[i]
38 strEnd = strEnd + num * int(numDictEnd[num])
39 return strEnd
40
41 print (Solution().returnStr('f3c3b3a3c3'))
结果: