【LeetCode 49.字母异位词分组】 哈希表 C++

在这里插入图片描述
思路:
1.看到这个题,基本就可以想到和哈希表有关系的了。
现在要解决的就是怎么映射的问题。
2.发现异位词只是顺序不同,而构成的字母都一样,那么,可不可以找个共同属性,当做哈希表的key,这样在key相同的情况下就可以完成对应关系了。
可能有些人会想asc值相同会不会是一类异构词,可惜不是,比如abd和bcd就是asc值相同但是不互为异构,
3.这里,可以往字符串当做key的方向想,既然都是相同字母组成的串,那么如果给它一个规则让每个异构串按特定属性排列一下,然后我们拿这个排列好的串当做key值,那么不就实现了异构串拥有相同key的目的了吗?对,直接备份一下每个string,然后sort一下,把sort好的串当做key,作映射,就完成了哈希表的对应关系了。
4.补充一下,我们备份完每个串,进行sort排序后,用find去找有没有存下过这类异构词,如果存下过,那么直接push_back在对应行的后面就行了,如果find发现没存过,就新开一行存就行了(输出数组可以看成一个以string为元素,vector为行列的二维数组)。

代码如下:

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        int len = strs.size();
        if(len==0)  return {{""}};
        std::map<string,int> mymap;
        vector<vector<string>> ans;
        int cur = 0;
        for(int i=0;i<len;i++)
        {
            string tmp(strs[i]);
            sort(tmp.begin(),tmp.end());
            std::map<string,int>::iterator it = mymap.find(tmp);
            if(it!=mymap.end())
            {
                    ans[it->second].push_back(strs[i]);
            } 
            else 
            {
                 vector<string> item;
                 item.push_back(strs[i]);
                 ans.push_back(item);
                 mymap.insert(make_pair(tmp,cur));
                 cur++;
            }
        }
        return ans;
    }
};

在这里插入图片描述

发布了32 篇原创文章 · 获赞 23 · 访问量 1823

猜你喜欢

转载自blog.csdn.net/qq_45492531/article/details/104181476
今日推荐