输入: “树”
输出: “ eert”
说明: “ 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阶?
答案 0 :(得分:0)
您是否有理由不能使用带有lambda键的内置排序?
>>> a = 'aabbbcccccd'
>>> sorted(a, key=lambda c: a.count(c))
['d', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'c', 'c']
>>> sorted(a, key=lambda c: a.count(c), reverse=True)
['c', 'c', 'c', 'c', 'c', 'b', 'b', 'b', 'a', 'a', 'd']
>>> ''.join(sorted(a, key=lambda c: a.count(c), reverse=True))
'cccccbbbaad'
我相信python的sort方法是O(n log n)
,但是count
会使它成为O(n^2)