目录
1.题目
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
提示:
1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i]
仅包含小写字母
2.代码
class Solution {
public:
static bool cmp(char a,char b)
{
return a<b;
}
vector<vector<string>> groupAnagrams(vector<string>& strs) {
unordered_map<string,vector<string> > mp;
vector<vector<string>> res;
res.clear();
for(int i=0;i<strs.size();i++)
{
string str = strs[i];
string key = strs[i];
sort(key.begin(),key.end(),cmp);
mp[key].push_back(str);
}
for(auto it=mp.begin();it!=mp.end();it++)
{
vector<string> tmp = it->second;
res.push_back(tmp);
}
return res;
}
};
3.代码解释
3.1.方法说明
-
函数:
groupAnagrams
-
输入:字符串数组
strs
-
输出:分组的异位词二维数组
3.2.实现步骤
-
哈希表映射:使用
unordered_map<string, vector<string>> mp
,键为排序后的字符串,值为原始字符串组成的列表。遍历每个字符串,将其排序后的结果作为键,原始字符串存入对应的列表中。 -
字符串排序:对每个字符串进行升序排序,生成唯一标识异位词的键。例如,"eat" 和 "tea" 排序后均为 "aet"。使用
static bool cmp(char a, char b)
定义排序规则。 -
收集结果:遍历哈希表,将所有值(分组后的列表)存入结果数组
res
中。