• LeetCode()Group Anagrams


    改了又改,简化了又简化,还是超时。可见必须从数组本身来进行hash运算。

    class Solution {
    public:
        vector<vector<string>> groupAnagrams(vector<string>& strs) {
            vector<vector<string>> res;
            int flag=0;
            for(int i=0;i<strs.size();i++)
            {
                for(int j=0;j<res.size();j++)
                {
              
                    if(res[j][0].size()== strs[i].size() && f(res[j][0],strs[i]))
                    {
                        res[j].push_back(strs[i]);
                        flag=1;
                        break;
                    }
                }
                if(flag == 0)
                {
                    vector<string> t;
                    t.push_back(strs[i]);
                    res.push_back(t);
                }
                flag=0;
            }
            return res;
        }
        bool f(string a,string b){
            int ss[26]={2 ,3 ,5 ,7 ,11 ,13, 17, 19, 23 ,29 ,31 ,37 ,41, 43, 47,53 ,59, 61, 67, 71, 73, 79, 83, 89, 97 };
            long long ra=1,rb=1;
            for(int i=0;i<a.size();i++)
            {   
                ra = ra*ss[a[i]-'a'];
                rb = rb*ss[b[i]-'a'];
            }
            return ra==rb;
        }
    };
    

      原来应该这么做

    vector<vector<string>> groupAnagrams(vector<string>& strs) {
            vector<vector<string>> res;
            if(strs.size() == 0)
                return res;
            unordered_map<string,int> map;
            for(int i=0;i<strs.size();i++)
            {
                string tem(strs[i]);
                sort(tem.begin(),tem.end());
                auto f=map.find(tem);
                if( f!= map.end())
                {
                    res[f->second].push_back(strs[i]);
                    sort(res[f->second].begin(),res[f->second].end());
                }
                else
                {
                    res.push_back(vector<string>({strs[i]}));
                    map[tem]=res.size()-1;
                }
            }
            return res;
        }
    

      还有这样

    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        unordered_map<string, vector<string>> count;
        int i = 0;
        for (auto s : strs)
        {
            sort(s.begin(), s.end());
            count[s].push_back(strs[i++]);
        }
        vector<vector<string>> res;
        for (auto n : count){
            sort(n.second.begin(), n.second.end());
            res.push_back(n.second);
        }
        return res;
    }
    

      

  • 相关阅读:
    mybatis 插件的原理-责任链和动态代理的体现
    优雅的对象转换解决方案-MapStruct使用进阶(二)
    将博客搬至CSDN
    python headers missing
    Gvim:unable to load python
    gvim keil 快捷跳转至出现错误(警告)行
    stm32 堆溢出
    keil在线烧录突然提示 No target connected #
    cygwin vim can't write .viminfo
    切换用户后,/etc/profile的配置不起效
  • 原文地址:https://www.cnblogs.com/yanqi110/p/4986922.html
Copyright © 2020-2023  润新知