给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
- 排序字符:对于每个字符串,我们将其字符排序,得到一个唯一的 "排序后的字母" 作为该字符串的标识符(key)。
- 使用哈希表:利用哈希表(
unordered_map
)来将排序后的字母作为键(key),将相同字母异位词的字符串作为值(value)。如果两个字符串排序后得到相同的结果,它们属于同一组。 - 最终结果:哈希表中存储了多个键值对,其中每个键对应的值是一个字母异位词列表。
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
unordered_map<string, vector<string>> anagrams;
for (const string& str : strs) {
string sorted_str = str;
sort(sorted_str.begin(), sorted_str.end());
anagrams[sorted_str].push_back(str);
}
vector<vector<string>> result;
for (auto& pair : anagrams) {
result.push_back(pair.second);
}
return result;
}
};
-
unordered_map<string, vector<string>> anagrams;
:使用哈希表anagrams
来存储字母异位词。键是排序后的字符串,值是一个包含所有字母异位词的字符串数组。 -
遍历每个字符串:
- 对每个字符串
str
,我们创建它的副本sorted_str
。 - 使用
sort()
函数对sorted_str
进行排序。 - 将排序后的
sorted_str
作为哈希表的键,原字符串str
被添加到相应的值(即字母异位词组)中。
- 对每个字符串
-
提取结果:
- 哈希表中的每个值都是一个字母异位词的组,我们将所有这些组收集到
result
数组中并返回。
- 哈希表中的每个值都是一个字母异位词的组,我们将所有这些组收集到