Given a string s, sort it in decreasing order based on the frequency of the characters. The frequency of a character is the number of times it appears in the string.
Return the sorted string. If there are multiple answers, return any of them.
Example 1:
Input: s = "tree"
Output: "eert"
Explanation: '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.
Input: s = "cccaaa"
Output: "aaaccc"
Explanation: Both 'c' and 'a' appear three times, so both "cccaaa" and "aaaccc" are valid answers.
Note that "cacaca" is incorrect, as the same characters must be together.
Input: s = "Aabb"
Output: "bbAa"
Explanation: "bbaA" is also a valid answer, but "Aabb" is incorrect.
Note that 'A' and 'a' are treated as two different characters.
s consists of uppercase and lowercase English letters and digits.The simplest way to solve the problem is to count the frequency of each character and then sort the characters based on their frequency. This can be achieved using a hashmap to count frequencies and then converting it to a list or array for sorting.
To improve on the sorting time, we can use bucket sort which exploits the fact that frequency maximum is bounded by the string length. By placing characters into buckets indexed by frequency, we can directly build the string.
We can also use a max-heap to always extract the most frequent element. This provides an efficient way to manage and prioritize elements by frequency without fully sorting the list of characters.