動機

這題是medium!?

Problem

Given a string s, sort it in decreasing order based on the frequency of characters, and return the sorted string.

 

Example 1:

Input: s = treeOutput: eertExplanation: 'e' appears twice while 'r' and 't' both appear once.So 'e' must appear before both 'r' and 't'. Therefore eetr is also a valid answer.

Example 2:

Input: s = cccaaaOutput: aaacccExplanation: Both 'c' and 'a' appear three times, so aaaccc is also a valid answer.Note that cacaca is incorrect, as the same characters must be together.

Example 3:

Input: s = AabbOutput: bbAaExplanation: bbaA is also a valid answer, but Aabb is incorrect.Note that 'A' and 'a' are treated as two different characters.

 

Constraints:

  • 1 <= s.length <= 5 * 105
  • s consists of English letters and digits.

Sol

就硬幹,因為沒有用特別的工具統計,所以performance比較低?

class Solution:
    def frequencySort(self, s: str) -> str:
        tbl = {}
        for c in s:
            if c not in tbl:
                tbl[c] = 1
            else:
                tbl[c] += 1
        s = list(s)
        s = sorted(s,key=lambda x: -tbl[x]) # 可以用heapq取代sort
        return ''.join(s)