【发布时间】:2018-08-06 22:22:21
【问题描述】:
输入: “树”
输出: “特别”
说明: 'e' 出现两次,而 'r' 和 't' 都出现一次。 所以'e'必须出现在'r'和't'之前。因此“eetr”也是一个有效的答案。
我试过这样的:
class Solution(object):
def frequencySort(self, s):
"""
:type s: str
:rtype: str
"""
has = dict()
l = list()
for c in s:
if c not in has:
has[c] = 1
else:
has[c] += 1
for k in sorted(has,key = has.get, reverse = True):
for i in range(has[k]):
l.extend(k)
return ("".join(l))
但它的 O(n * m) n = 字符串长度,m = 字符的最大出现次数
如何将其改进为 n 级?
【问题讨论】:
-
也许
return ''.join(c * t for c, t in collections.Counter(s).most_common())bookshadow.com/weblog/2016/11/02/… -
sorted(s, key=Counter(s).get, reverse=True)也可以。