概述
给定一个字符串,请将字符串里的字符按照出现的频率降序排列。
示例 1:
输入: "tree" 输出: "eert" 解释: 'e'出现两次,'r'和't'都只出现一次。 因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。
class Solution(object):
def frequencySort(self, s):
"""
:type s: str
:rtype: str
"""
d = {}
for i in range(len(s)):
if s[i] in d:
d[s[i]] += 1
else:
d[s[i]] = 1
list1 = zip(d.values(),d.keys())
list1.sort(reverse=True)
res = ""
for i in range(len(list1)):
res += list1[i][1]*list1[i][0]
return res
执行用时: 52 ms, 在Sort Characters By Frequency的Python提交中击败了81.58% 的用户
class Solution(object):
def frequencySort(self, s):
"""
:type s: str
:rtype: str
"""
from collections import Counter
count=collections.Counter(s).most_common()
res=''
for c,v in count:
res+=c*v
return res
Counter 集成于 dict 类,因此也可以使用字典的方法,此类返回一个以元素为 key 、元素个数为 value 的 Counter 对象集合
>>> from collections import Counter
>>> s = "hello pinsily"
>>> d = Counter(s)
>>> d
Counter({'l': 3, 'i': 2, 'h': 1, 'e': 1, 'o': 1, ' ': 1, 'p': 1, 'n': 1, 's': 1, 'y': 1})
elements()
返回一个迭代器
>>> d.elements()
<itertools.chain object at 0x0000019AC812BBA8>
# 可以进行打印和排序
>>> for i in d.elements():
... print(i)
...
most_common(n)
返回数量最多的前 n 个元素
>>> d.most_common(3)
[('l', 3), ('i', 2), ('h', 1)]
subtract([iterable-or-mapping])
相当于减法,调用这个方法的 Counter 会被覆盖掉
>>> c = Counter(a=4, b=2, c=0, d=-2)
>>> d = Counter(a=1, b=2, c=3, d=4)
>>> c.subtract(d)
>>> c
Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})
>>> d
Counter({'d': 4, 'c': 3, 'b': 2, 'a': 1})
最后
以上就是踏实仙人掌为你收集整理的451. 根据字符出现频率排序(中等,字符串)(12.23)的全部内容,希望文章能够帮你解决451. 根据字符出现频率排序(中等,字符串)(12.23)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复