49. 字母异位词分组

发布时间 2023-12-14 00:48:43作者: DawnTraveler

1.题目介绍

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

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

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

示例 2:

输入: strs = [""]
输出: [[""]]

示例 3:

输入: strs = ["a"]
输出: [["a"]]

提示:

  • \(1 <= strs.length <= 10^{4}\)
  • \(0 <= strs[i].length <= 100\)
  • \(strs[i]\) 仅包含小写字母

2.题解

2.1 哈希表

这里的思路主要是用哈希表存储一个映射键值,能够映射到所有的字母异位词,这里采用的映射方法为排序,采用排序后的字符串作为映射键值
每遍历一个数据,就映射出其哈希键值,并存储到哈希表中,最后遍历哈希表,的到所需数组。
这里要注意的一个是mp[key].emplace(str); 这里的mp[key]表示的是一个vector<string,>使用的也是vector的emplace的方法
不要使用mp.emplace(key,str);或者mp.emplace(make_pair<string,vector>(key,str)); 类似这种错误方法(前面一种根本就是错误写法),因为你一次无法直接获得整个vector

代码

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        unordered_map<string, vector<string>> mp;
        for (auto str: strs){
            string key = str;
            sort(key.begin(),key.end());
            mp[key].emplace(str);
        }
        vector<vector<string>> gpAn;
        for (auto it = mp.begin(); it != mp.end(); it++){
            gpAn.emplace_back(it->second);
        }
        return gpAn;
    }
};

2.2