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<String>) -> Vec<Vec<String>> {
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<String>| e.push(word.to_string()))
.or_insert(vec![word.to_string()]);
})
.collect::<()>();
return words.into_iter().map(|(_,v)|v).collect();
}
}