hash table
heap
bucket sort
sort
]
Leetcode 0451 Sort Characters By Frequency
Problem statement
https://leetcode.com/problems/sort-characters-by-frequency/
Solution
We can sort pairs: (frequency, letter) using counter for all string.
Complexity
Time complexity in O(n + m log m)
, where m
is size of alphabet, space complexity is O(m)
.
Code
class Solution:
def frequencySort(self, s):
return "".join([a*b for a,b in Counter(s).most_common()])
Remark
Other approaches:
We can use counters to count frequencies of each element and put them into hash table. Then we can use the fact, that frequencies are never more than n
and use buckets: for example if some letter have frequency 3
, put it to bucket number 3
. Then we traverse buckets from the end and build string. Overall time and space complexity is O(n)
.
We can also use heaps instead of sort with exaclty the same complexity. In practice, if m
is not big, performance can be better than buckets approach.
See also similar problem 0347: Top K Frequent Elements and 0692. Top K Frequent Words.