1.题目
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
链接:https://leetcode-cn.com/problems/group-anagrams/
2.思路分析
- unordered_map<string, vector< string >>
- 这里是要用这个数据的组织形式,这样的话,我们就根据这种排好序的字符串将相同的字符挂在了一起
- 这样的话,直接将数据写入到二维数组中即可
3.代码展示
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
// 键值对[key, value]
// 这里key是字母排序之后的字符串,如果之后的排序后的字符串相等的话,那么就放在同一个vector中
unordered_map<string, vector<string>> mp;
for(auto& e : strs)
{
// str临时值,保存排序后的字符串,也是插入key值
string str = e;
sort(str.begin(), str.end());
mp[str].emplace_back(e);
}
// 这里不用auto的原因是mp的value不是一个类型,而是一个string类型的数组
vector<vector<string>> ans;
for(auto it = mp.begin(); it != mp.end(); ++it)
{
ans.emplace_back(it->second);
}
return ans;
}
};