按频率对字符排序

时间:2018-08-06 22:22:22

标签: python algorithm

输入: “树”

输出: “ 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阶?

1 个答案:

答案 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)

相关问题