zoukankan      html  css  js  c++  java
  • 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;
    }
    

      

  • 相关阅读:
    swift 设置图片动画组 iOS11之前 默认图片 设置不成功
    iOS 管理库 Carthage 安装以及使用
    OC 和 swift 冒泡排序
    swift中UITextView的使用
    图片拉伸
    swift
    label文字从左上角开始
    2017最新总结CocoaPods安装细节及遇到的问题
    苹果 重置APPID密保问题及更新开发者协议
    xcode
  • 原文地址:https://www.cnblogs.com/yanqi110/p/4986922.html
Copyright © 2011-2022 走看看