在该题目中,算法分为两大操作,第一个操作是确定其是哪个词的异位词,第二个操作是将其放入对应的异位词集合
因此,第一个操作要求我们寻找一个标识一组异位词的方法,由于题目所给数据均为独立单词,因此最好的方法是直接对字符串进行排序,一组异位词排序后得到的是相同的字符串
对于第二个操作,为了将相同异位词放入同一个集合,可以创建一个以排序后的字符串作为键的哈希表,而该哈希表的值可以是数组,也可以是下标
如果是数组,则需要在稍后额外for循环去构造结果数组
如果是下标,则可以在操作哈希表时即构造结果数组
以下是使用排序字符串和下标作为键值对的哈希表的实现方法
vector<vector<string>> groupAnagrams(vector<string>& strs) {
//对字母进行排序,若有该字母,则将其加入对应数组
vector<vector<string>> res;
unordered_map<string, int> resHash;
for(string& str : strs)
{
string s = str;
sort(s.begin(), s.end());
if(!resHash.count(s))
{
res.push_back(vector<string>());
resHash.emplace(s, res.size() - 1);
}
res[resHash[s]].push_back(str);
}
return res;
}