中等
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
输入:strs = ["eat", "tea", "tan", "ate", "nat", "bat"] 输出:[["bat"],["nat","tan"],["ate","eat","tea"]]
解题:
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
unordered_map<string, vector<string>>myHash;
vector<vector<string>>ans;
for (string& str : strs)//遍历strs
{
//将排序后的字符串转作为键
string key = str;
sort(key.begin(), key.end());
//在键对应的值(vector<string>类型)添加原始字符串(未被排序的)
myHash[key].emplace_back(str);
}
for (auto sameStr = myHash.begin(); sameStr != myHash.end(); ++sameStr)
{
//sameStr->second表示当前哈希表中某个键(即排序后相同的字符组成的字符串)对应的值
ans.emplace_back(sameStr->second);
}
return ans;
}
};
在 unordered_map
中,second
是键-值对中的值部分。在我的代码中,值部分是一个 vector<string>
,用于存储同字母异序词的原始字符串。
ans.emplace_back(sameStr->second)
的作用是将哈希表中某个键(即同字母异序词组成的字符串)对应的原始字符串向量插入到 ans
向量的尾部,从而将同字母异序词分组后的结果存储在 ans
中。