字母异位词分组

  • 题目及要求
  • 哈希算法
  • 在主函数内使用

题目及要求

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 1:

输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
示例 2:

输入: strs = [“”]
输出: [[“”]]
示例 3:

输入: strs = [“a”]
输出: [[“a”]]

提示:

1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i] 仅包含小写字母

哈希算法

思路:对于第一个字符串 “eat”,将其保存到临时变量 data 中,并对其进行排序得到 “aet”。在哈希表中找到键为 “aet” 的项,发现不存在,则创建该键,并将原始字符串 “eat” 加入到值的向量中。
对于第二个字符串 “tea”,同样保存到 data 中,并排序得到 “aet”。在哈希表中找到键为 “aet” 的项,发现已存在,则将原始字符串 “tea” 加入到值的向量中以此类推,到最后遍历哈希表 hash 中的每一对键值对然后将他们全部输出就行

class Solution {public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string,vector<string>>hash;for(auto str:strs){string data=str;sort(str.begin(),str.end()); //排序hash[str].push_back(data); //存入哈希}vector<vector<string>>res;for(auto s:hash){ //第二次遍历res.push_back(s.second);}return res;}};

在主函数内使用

int main() {vector<string> strs = { "eat", "tea", "tan", "ate", "nat", "bat" };vector<vector<string>> result = groupAnagrams(strs);for (vector<string>group : result) {for (string str : group) {cout << str << "";}cout << endl;}return 0;}