--- title: '451. Sort Characters By Frequency' description: 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 sidebar: label: 'Sort Characters By Frequency' badge: 'Medium' --- Hash Table ### 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. ### Example 2: - 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. ### Example 3: - 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. ### Constraints: - `1 <= s.length <= 5 * 10^5` - `s` consists of uppercase and lowercase English letters and digits. ## Solution ```js /** * @param {string} s * @return {string} */ var frequencySort = function (s) { // count the frequency of each character const freq = {}; for (let c of s) freq[c] = (freq[c] || 0) + 1; // sort the characters by frequency return s .split("") .sort((a, b) => freq[b] - freq[a] || a.localeCompare(b)) .join(""); }; ```