题目
1 每个字符串跟着一个数字,表示字符串的重复次数 2 先按照数字排序,再按照字符串排序,从小到大, 3 4 例: 5 c2a1 6 结果 7 acc 8 9 例: 10 c10aa2 11 aaaacccccccccc
思路:
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'))
结果: