给定一个字符串 s ,根据字符出现的 频率 对其进行 降序排序 。一个字符出现的 频率 是它出现在字符串中的次数。
返回 已排序的字符串 。如果有多个答案,返回其中任何一个。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/sort-characters-by-frequency
例:
输入: s = "tree"
输出: "eert"
解释: 'e'出现两次,'r'和't'都只出现一次。
因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。
解析:
对字符串进行遍历,对每个字符出现的次数进行记录,然后按照次数进行降序排列,最后对排序过的字符串遍历输出即可。
class Solution(object):
def frequencySort(self, s):
"""
:type s: str
:rtype: str
"""
array = [[0, i] for i in range(128)] # 创建空数组用于存储
for c in s: # 对字符串进行遍历
array[ord(c)][0] += 1 # ord(c):返回字符对应的 ASCII 数值, 每遍历到一个就进行+1
array.sort(reverse=True, key=lambda x:x[0]) # 进行降序排列,对数组的第一个值进行比较排序
res = '' # 创建结果空字符串
for t in array: # 对排序过的字符串进行遍历
if t[0] > 0: # 判断是否出现过
res += chr(t[1]) * t[0] # chr(i):返回当前整数对应的 ASCII 字符,字符乘以出现此处得出字符串并进相加
return res # 返回字符串