diff --git a/work/Baton-1/Medium/Hash Table/451.sort-characters-by-frequency.js b/work/Baton-1/Medium/Hash Table/451.sort-characters-by-frequency.js index ac02e30..23ac12b 100644 --- a/work/Baton-1/Medium/Hash Table/451.sort-characters-by-frequency.js +++ b/work/Baton-1/Medium/Hash Table/451.sort-characters-by-frequency.js @@ -2,55 +2,61 @@ * 451. Sort Characters By Frequency * Difficulty: Medium * https://leetcode.com/problems/sort-characters-by-frequency/ - * + * * ────────────────────────────────────────────────── - * + * * 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. - * + * * 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. -*/ + */ /** * @param {string} s * @return {string} */ -var frequencySort = function(s) { - +var frequencySort = function (s) { + const freq = {}; + for (let c of s) freq[c] = (freq[c] || 0) + 1; + + return s + .split("") + .sort((a, b) => freq[b] - freq[a] || a.localeCompare(b)) + .join(""); };