题目描述:
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:输入: strs = [""] 输出: [[""]]
示例 3:输入: strs = ["a"] 输出: [["a"]]
使用 hash 表存储每一组字符串, 因为一组的字母异位词经过排序后的字典序是相同的, 因此遍历每一个字符串, 将排序后的(具有字典序)字符串作为 hash 表的 key(键), 然后将该字符串存入对应 key 的(value)值中, 最后遍历 hash 表同时将 hash 表的内容添加至结果变量(ans),再将结果变量(ans)返回即可。
eg: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
hash表key | value |
"aet" | "ate","eat","tea" |
"ant" | "nat","tan" |
"abt" | "bat" |
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
//定义一个hash表
unordered_map<string,vector<string>> order;
//定义结果变量
vector<vector<string>> ans;
//遍历字符串
for(int i = 0; i < strs.size(); i++){
//获取hash表的键
string key = strs[i];
//对键排序
sort(key.begin(),key.end());
//通过键将当前字符串添加到hash表中
order[key].push_back(strs[i]);
}
//遍历hash表,并将其结果添加至结果变量
for(auto it = order.begin(); it != order.end(); it++){
ans.push_back(it->second);
}
return ans;
}
};