python 练习题- 数据解压缩

题目

 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'))

 

 

结果:

 

posted @ 2021-02-18 16:38  菜小鱼~  阅读(174)  评论(0编辑  收藏  举报