MST
星途 面试题库

面试题:Rust字符串中字符统计与排序

有一个Rust字符串,包含各种英文字母(大小写混合)。请编写程序统计每个字符出现的次数,并按照字符出现次数从高到低排序(如果出现次数相同,则按字符的字典序排序),输出排序后的结果。说明在实现过程中是如何处理Rust字符串中字符的。
13.3万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
use std::collections::HashMap;

fn main() {
    let s = "Hello World, Rust is great!".to_string();
    let mut char_count: HashMap<char, u32> = HashMap::new();

    // 处理Rust字符串中的字符
    for c in s.chars() {
        if c.is_alphabetic() {
            *char_count.entry(c).or_insert(0) += 1;
        }
    }

    let mut count_vec: Vec<(char, u32)> = char_count.into_iter().collect();

    count_vec.sort_by_key(|&(_, count)| std::cmp::Reverse(count));
    count_vec.sort_by_key(|&(c, _)| c);

    for (c, count) in count_vec {
        println!("{}: {}", c, count);
    }
}
  1. 字符统计
    • 使用HashMap<char, u32>来统计每个字符出现的次数。
    • 通过for c in s.chars()遍历Rust字符串中的每个字符。chars()方法将Rust字符串拆分成一个个字符,这是处理Rust字符串字符的常用方式。并且通过c.is_alphabetic()过滤掉非字母字符。
  2. 排序
    • 首先按照出现次数从高到低排序,使用sort_by_key(|&(_, count)| std::cmp::Reverse(count))
    • 然后对于出现次数相同的字符,按照字典序排序,使用sort_by_key(|&(c, _)| c)
  3. 输出
    • 遍历排序后的Vec<(char, u32)>,输出每个字符及其出现次数。