• Group Anagrams


    题目链接

    Group Anagrams - LeetCode

    注意点

    • 字母都是小写的

    解法

    解法一:用一个字符串表示strs[i]中出现的字母,比如:abc->111000000000000000000000000aab->210000000000000000000000000。同时用map保存hash与vector的下标对应关系。时间复杂度O(n)

    class Solution {
    public:
        vector<vector<string>> groupAnagrams(vector<string>& strs) {
            vector<vector<string>> ret;
            map<string,int> m;
            if(strs.size() == 0) return ret;
            int i,j,n = strs.size();
            for(i = 0;i < n;i++)
            {
                string hash = "000000000000000000000000000";
                for(j = 0;j < strs[i].size();j++)
                {
                    hash[strs[i][j] - 'a']++;
                }
                cout << strs[i] << " " << hash << endl;
                if(m.find(hash) == m.end())
                {
                    vector<string> temp{strs[i]};
                    ret.push_back(temp);
                    m[hash] = ret.size()-1;
                }
                else
                {
                    int index = m[hash];
                    ret[index].push_back(strs[i]);
                }
            }
            return ret;
        }
    };
    

    解法二:abcbac的区别只在于顺序不同,因此,只要对strs[i]排序之后进行比较即可。时间复杂度O(nlogn)。

    class Solution {
    public:
        vector<vector<string>> groupAnagrams(vector<string>& strs) {
            vector<vector<string>> ret;
            unordered_map<string, vector<string>> m;
            for (string str : strs) {
                string t = str;
                sort(t.begin(), t.end());
                m[t].push_back(str);
            }
            for (auto a : m) {
                ret.push_back(a.second);
            }
            return ret;
        }
    };
    

    小结

    • 解法二的时间复杂度更高,但是所花时间更少...
  • 相关阅读:
    Go语言基础--1.1 变量的声明
    基本语法
    弹性盒子修改
    弹性盒子内容
    弹性盒子
    响应式列重置
    栅格系统
    布局容器
    额外按钮
    可消失的弹出框
  • 原文地址:https://www.cnblogs.com/multhree/p/10424218.html
Copyright © 2020-2023  润新知