49. 字母异位词分组
1.题目介绍
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
提示:
- \(1 <= strs.length <= 10^{4}\)
- \(0 <= strs[i].length <= 100\)
- \(strs[i]\) 仅包含小写字母
2.题解
2.1 哈希表
这里的思路主要是用哈希表存储一个映射键值,能够映射到所有的字母异位词,这里采用的映射方法为排序,采用排序后的字符串作为映射键值
每遍历一个数据,就映射出其哈希键值,并存储到哈希表中,最后遍历哈希表,的到所需数组。
这里要注意的一个是mp[key].emplace(str); 这里的mp[key]表示的是一个vector<string,>使用的也是vector的emplace的方法
不要使用mp.emplace(key,str);或者mp.emplace(make_pair<string,vector
代码
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
unordered_map<string, vector<string>> mp;
for (auto str: strs){
string key = str;
sort(key.begin(),key.end());
mp[key].emplace(str);
}
vector<vector<string>> gpAn;
for (auto it = mp.begin(); it != mp.end(); it++){
gpAn.emplace_back(it->second);
}
return gpAn;
}
};