目录
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 获取排序好的stringsort(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;}
};