LeetCode 字母异位词分组 Rust

LeetCode 字母异位词分组 Rust

题目

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

  • 该题考察了Rust中的HashMap用法,在Rust中HashMap的典型使用方式是基于entry()和or_default(),or_insert等API来进行类描述性的字典处理。这样可以避免冗余的 if key exist { get value }else{ insert }这样的操作。

  • 在对vec的迭代中,使用了map的方式,使用闭包构建了HashMap的key值。Rust支持基于map的表达形式在表述数据的处理过程上,会比for i in xx.iter()方式更简练。

  • Vec::from_iter的使用,可以简化Vector的构建过程。需要引入FromIterator trait

#![allow(unused_must_use)]
use std::collections::HashMap;
use std::iter::FromIterator;
struct Solution;

impl Solution {
    pub fn group_anagrams(strs: Vec) -> Vec> {
        let mut words = HashMap::new();
        strs.iter()
            .map(|word| {
                let mut k = Vec::from_iter(word.bytes());
                k.sort();
                words
                    .entry(k)
                    .and_modify(|e: &mut Vec| e.push(word.to_string()))
                    .or_insert(vec![word.to_string()]);
            })
            .collect::<()>();
        return words.into_iter().map(|(_,v)|v).collect();
    }
}

你可能感兴趣的:(LeetCode 字母异位词分组 Rust)