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

  

原文地址:https://www.cnblogs.com/yanqi110/p/4986922.html