← All writing
Development

[Leetcode] Sort Characters By Frequency

451. 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.

how to approach?

function frequencySort(s: string): string {
    let sMap = new Map<string,number>()
    
    for (let chr of s) {
        sMap.set(chr, (sMap.get(chr) || 0) + 1)
    }
    
    const sorted = [...sMap].sort((a,b)=>b[1]-a[1])
    
    const answer = sorted.map(([chr,count])=>chr.repeat(count))

    return answer.join('')
};
  1. create map to keep the element in string and count of the element.
  2. in for loop over string, each character will be set as key and value will be the maps value + 1. if it doesn't exist then it will be 0 and + 1.
  3. sort the array from the map based on the count value.
  4. and answer will be mapped by the key repeated by the count value in map.
  5. return the joined array at the end

summary

this leetcode problem is solved by typescript language.

understanding set the map to save the element and count value, and sort it out based on the count(frequency), use the Map to create the repeated characters based on the count and return the string.