• 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;
    }
    

      

  • 相关阅读:
    Mandala Coloring Book Game ver 1.2
    Racing Game Starter Kit 1.1.0a
    Unity3D射击项目源码
    U3D第一人称解谜游戏完整项目工程源码
    uMMORPG Remastered v2.25
    U3D网球完整项目源码 v1.1
    Unity3D果汁店模拟经营完整项目工程源码
    3D坦克大战游戏项目源码
    周民强实变函数论第3版勘误14个
    竞赛2021年浙江省高等数学(微积分)竞赛数学类与工科类试题2页pdf
  • 原文地址:https://www.cnblogs.com/yanqi110/p/4986922.html
Copyright © 2020-2023  润新知