LeetCode0451.按频率排序字符[Medium][Python][桶排序]"tree"输出:"eert"解释:'e'出现了两次,而'r'和't'都出现了一次。所以'e'必须出现在'r'和't'之前。因此“eetr”也是一个有效答案。示例2:输入:“cccaaa”输出:“cccaaa”解释:'c'和'a'都出现了三次,所以“aaaccc”也是一个有效答案。注意“cacaca"是不正确的,因为相同的字符必须在一起。示例3:输入:"Aabb"输出:"bbAa"解释:"bbaA"也是一个有效答案,但"Aabb"是不正确的。注意'A'和'a'被视为两个不同的字符。给定一个字符串,请将字符串中的字符按频率降序排列。示例1:输入:"tree"输出:"eert"解释:'e'出现了两次,'r'和't'都只出现了一次。因此'e'必须出现在'r'和't'之前。此外,“eetr”是一个有效的答案。示例2:输入:"cccaaa"输出:"cccaaa"解释:'c'和'a'都出现了三次。此外,“aaaccc”也是一个有效答案。请注意,“cacaca”是不正确的,因为相同的字母必须放在一起。示例3:输入:"Aabb"输出:"bbAa"解释:此外,"bbaA"也是一个有效答案,但"Aabb"是错误的。请注意,'A'和'a'被视为两个不同的字符。idea桶排序统计字符串字符出现的次数,然后对桶进行排序,最后倒序输出字符串。可以直接使用Python的Counter类统计每个字符出现的次数,使用most_common函数进行排序。时间复杂度:O(n)空间复杂度:O(m)m是桶的个数Python代码类解法:deffrequencySort(self,s):""":types:str:rtype:str"""##方法一:collections.Counter#importcollections#需要导入collections#count=collections.Counter(s).most_common()#Counter类可以统计每个字符出现的次数,使用most_common函数将它们排列在order#res=''#forchar,cntincount:#res+=char*cnt#字符和时间相乘#returnres#方法二:桶排序importcollections#统计字符个数ret=[]count_frequency=collections.defaultdict(int)foriins:count_frequency[i]+=1#统计字符数#桶排序buckets=[[]foriinrange(len(s)+1)]foriincount_frequency:#i是一个字符#print(i)buckets[count_frequency[i]].extend(i*count_frequency[i])#打印buckets[::-1]中i的排序字符串:#-1表示倒序if(我):退役。扩展(i)return''.join(ret)#return''.join(c*-nforn,cinsorted((-s.count(c),c)forcinset(s)))#一行代码也可以解决代码地址GitHub链接
