ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-10-17 10:01:59  阅读:132  来源: 互联网

标签:tmp map 映射 异位 字母 iter 单词 vector 数据结构


题目

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

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

提示:

输入: 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值的单词分组。

标签:tmp,map,映射,异位,字母,iter,单词,vector,数据结构
来源: https://blog.csdn.net/qq_40677380/article/details/120807708

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有