给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
输出:
[
[“ate”,“eat”,“tea”],
[“nat”,“tan”],
[“bat”]
]
说明:
所有输入均为小写字母。
不考虑答案输出的顺序。
解析:本题的关键在于如何将字母相同的词关联起来,这里使用了hashmap,字母异位词经过排序后得到的字符串是相同的,可以当做map的键。
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> res;
//map中储存对应键应该存储在res的何处
unordered_map<string,int> m;
for(string& str:strs){
string tmp = str;
//得到对应键
sort(tmp.begin(),tmp.end());
if(m.count(tmp)){
res[m[tmp]].push_back(str);
}
else{
m[tmp]=res.size();
res.push_back({str});
}
}
return res;
}
};