Skip to content

Latest commit

 

History

History
49 lines (40 loc) · 1.22 KB

File metadata and controls

49 lines (40 loc) · 1.22 KB

451. Sort Characters By Frequency

Given a string, sort it in decreasing order based on the frequency of characters.

Example 1:

Input: "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: "cccaaa"
Output: "cccaaa"
Explanation: Both 'c' and 'a' appear three times, so "aaaccc" is also a valid answer.
Note that "cacaca" is incorrect, as the same characters must be together.

Example 3:

Input: "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.

Solutions (Rust)

1. Solution

use std::collections::HashMap;

impl Solution {
    pub fn frequency_sort(s: String) -> String {
        let mut s = s.chars().collect::<Vec<_>>();
        let mut counter = HashMap::new();

        for ch in s.clone() {
            *counter.entry(ch).or_insert(0) -= 1;
        }

        s.sort_unstable();
        s.sort_by_key(|k| counter.get(&k));

        s.iter().collect()
    }
}