根据字符出现频率排序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  # 返回字符串
        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值