题目
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
1 | 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"] |
示例 2:
1 | 输入: strs = [""] |
示例 3:
1 | 输入: strs = ["a"] |
提示:
1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i]
仅包含小写字母
代码
1 | use std::collections::HashMap; |
说明
use std::collections::HashMap;
: 这是引入 Rust 标准库中的 HashMap 数据结构,它允许你使用键值对的方式存储和检索数据。let mut anagrams_map: HashMap<Vec<char>, Vec<String>> = HashMap::new();
: 这行代码创建了一个可变的 HashMap,其中键是经过排序的字符数组,而值是原始字符串的向量。HashMap::new()
创建了一个新的 HashMap 实例。for s in strs { ... }
: 这是一个迭代循环,遍历输入的字符串数组strs
中的每个字符串。在每次迭代中,当前字符串被绑定到变量s
上。let mut char_vec: Vec<char> = s.chars().collect();
: 这一行创建了一个可变的字符向量char_vec
,它由当前字符串s
的字符组成。s.chars()
返回一个字符迭代器,而.collect()
将迭代器的元素收集到一个新的集合中,这里是一个字符向量。char_vec.sort();
: 这是对字符向量进行排序的操作。因为我们希望找到字母异位词,所以排序后的字符向量将相同的字母组合在一起,从而使它们在哈希表中形成相同的键。let entry = anagrams_map.entry(char_vec).or_insert(vec![]);
: 这一行使用entry
方法来获取哈希表中指定键char_vec
对应的值,如果该键不存在,则插入一个空的向量作为默认值。这是为了确保每个键都有一个关联的向量用于存储字母异位词。entry.push(s);
: 这一行将原始字符串s
添加到对应的值中,即与排序后的字符数组关联的向量中。anagrams_map.into_values().collect()
: 这一行通过into_values()
方法将哈希表中所有的值取出,并通过collect()
方法将它们收集到一个新的向量中。最终,这个向量包含了所有的字母异位词分组。
这样,整个实现就完成了字母异位词分组的操作。