给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词:是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
提示:
思路:
- 遍历给定的字符串数组,对每一个字符串,对其进行排序,如果不存在与 哈希表,则新建一个字符串数组,
- key=排序后的字符串,value=字符串数组的下标,hash[排序后的字符串]=字符串数组的下标,
- 例子:“ate”、“eat”,排序后都是 “aet”,所以可以通过排序判断 “字母异位词” 是否已经存在,
- 存在的话,通过 hash 表找出对应的数组,加入进去即可。
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> res;
unordered_map<string, int> h;
for(const string& s: strs){
string back_str = s;
sort(back_str.begin(), back_str.end());
if(h.count(back_str)){
int idx = h[back_str];
res[idx].push_back(s);
}else{
vector<string> a;
a.push_back(s);
res.push_back(a);
h[back_str] = res.size() - 1;
}
}
return res;
}
};