数据结构-字母异位词分组(无序映射)

题目

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

字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母都恰好只用一次。

提示:

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

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

解题思路:

首先这道题的分组具有相似性,即相同字母组成的单词为一组。可以考虑将相同字母组成的单词依据特定的Hash函数计算出区别于其他单词的值。简单的做法就是单词排序,让一组单词有这相同的字母顺序。利用unordered_map将Hash值作为key,具体单词作为value存放在vector中。最后通过迭代器遍历map转换成vector<vector<string>>类型。时间复杂度O(n)

代码示例:

vector<vector<string>> groupAnagrams(vector<string>& strs) {
        unordered_map<string, vector<string>> map;
        for(const string& str : strs)
        {
            string tmp = str;
            sort(tmp.begin(),tmp.end());
            map[tmp].push_back(str);
        }

        vector<vector<string>> ans;
        //遍历map输出结果
        for(auto iter = map.begin(); iter != map.end(); ++iter)
        {
            vector<string> res_tmp = iter->second;
            ans.push_back(res_tmp);
        }
        return ans;
    }

核心思路:利用无序映射(插入与查找的时间复杂度都是O(1))将相同Hash值的单词分组。

上一篇:[Python3学习笔记-基础语法] 2分钟彻底精通迭代器和生成器


下一篇:贪心-Bag of Tokens