20 lines
592 B
Rust
20 lines
592 B
Rust
use std::cmp::Reverse;
|
|
use std::collections::BTreeMap;
|
|
|
|
impl Solution {
|
|
pub fn frequency_sort(s: String) -> String {
|
|
let mut freqs: BTreeMap<_, usize> = BTreeMap::new();
|
|
|
|
s.as_str().chars().for_each(|c| {
|
|
let current = freqs.get(&c).unwrap_or(&0);
|
|
freqs.insert(c, 1 + current);
|
|
});
|
|
|
|
let mut frequencies: Vec<_> = freqs.iter().collect();
|
|
frequencies.sort_by_key(|&(_, count)| Reverse(count));
|
|
|
|
frequencies.iter().fold(String::new(), |s, (c, count)| {
|
|
s + &c.to_string().repeat(**count)
|
|
})
|
|
}
|
|
}
|