目录
1、题目链接
2、题目介绍
3、解法
初始化设定--图解
步骤图解
4、代码
1、题目链接
49. 字母异位词分组 - 力扣(LeetCode)
2、题目介绍
3、解法
- 字母异位词的本质是字符相同但排列不同。因此,我们可以对字符串进行排序,排序后的字符串可以作为哈希表的键。
- 第二种比较异位词的方法:利用哈希表记录,每个字符的出现次数。
- 在本题中,我们选择第一种。便于后面分组操作。
- 哈希表的每个键对应的值是一个字符串数组,这个数组包含了所有排序后等于该键的原始字符串(即所有字母异位词)。
初始化设定--图解
步骤图解
1)遍历第一个元素,操作细节。
2)第二个元素
3)第三个元素
4、代码
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
//特殊的hash表
//使用嵌套容器
unordered_map<string, vector<string>> hash; //键值是排好序的字符串,val是异位词的元素字符串数组
for (int i = 0; i < strs.size(); i++)
{
//依次遍历strs
//对每个元素排序
string newStr = strs[i]; //辅助string 获取排序好的string
sort(newStr.begin(), newStr.end()); //排序
hash[newStr].push_back(strs[i]); //异位词自动进入一组
}
//hash结果提取
vector<vector<string>> ret;
for (auto& e: hash)
{
ret.push_back(e.second);
}
return ret;
}
};