天天看点

根据字符出现频率排序Python解法

给定一个字符串 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  # 返回字符串