似乎已经挺久没有写写算法题了,今天给大家写写Leetcode中的一道中等算法题:
题目:给定一个字符串,请将字符串里的字符按照出现的频率降序排列。
示例 1:
输入:
"tree"输出:
"eert"解释:
'e'出现两次,'r'和't'都只出现一次。
因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sort-characters-by-frequency
本人 解题思路:
1、将每个字符逐一存入字典,并将其出现的次数进行保存
2、将字典按照values进行排序
2、再逐一列出,形成新的字符串
步骤一(将每个字符逐一存入字典,并将其出现的次数进行保存):
dict_1={}
for i,i1 in enumerate(s):
print(i,i1)
if i1 not in dict_1:
dict_1.setdefault(i1,1)
else:
dict_1[i1]+=1
步骤二(将字典按照value进行排序):
new_list=sorted(dict_1.items(),key=lambda item:item[1],reverse=True)
步骤三(再逐一列出,形成新的字符串):
str_1=''
for i in new_list:
for i1 in range(i[1]):
str_1=str_1+i[0]
思路基本完成,最终放上LeetCode里面的完整代码,方便网友们使用:
class Solution:
def frequencySort(self, s: str):
dict_1={}
for i,i1 in enumerate(s):
print(i,i1)
if i1 not in dict_1:
dict_1.setdefault(i1,1)
else:
dict_1[i1]+=1
new_list=sorted(dict_1.items(),key=lambda item:item[1],reverse=True)
str_1=''
for i in new_list:
for i1 in range(i[1]):
str_1=str_1+i[0]
return str_1