zoukankan      html  css  js  c++  java
  • Group Anagrams -- LeetCode

    Given an array of strings, group anagrams together.

    For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"]
    Return:

    [
      ["ate", "eat","tea"],
      ["nat","tan"],
      ["bat"]
    ]

     

    Note:

    1. For the return value, each inner list's elements must follow the lexicographic order.
    2. All inputs will be in lower-case.

    思路:使用哈希表。将所有字符串按照其内部字母排序后的结果进行分组。时间复杂度O(NlogN + Nmlogm)。其中N是单词数,m为最长的单词的长度。

    补充:将一个字符串字母重新排序的算法:默认用sort函数是O(nlogn),其中n为字符串的长度。这里有一种O(n)的方法。方法是依次计数每一个字符在单词中出现的次数,然后按照字母序将出现过的单词重新拼出一个单词来。这种方法要求单词内的字母范围不能太大,而且会消耗额外空间。

     1 class Solution {
     2 public:
     3     vector<vector<string>> groupAnagrams(vector<string>& strs) {
     4         vector<vector<string> > res;
     5         if (strs.size() == 0) return res;
     6         unordered_map<string, vector<string> > dict;
     7         for (int i = 0, n = strs.size(); i < n; i++)
     8         {
     9             string tem = strs[i];
    10             sort(tem.begin(), tem.end());
    11             if (dict.count(tem) == 0)
    12             {
    13                 vector<string> cand(1, strs[i]);
    14                 dict.insert(make_pair(tem, cand));
    15             }
    16             else dict[tem].push_back(strs[i]);
    17         }
    18         for (auto i : dict)
    19         {
    20             sort(i.second.begin(), i.second.end());
    21             res.push_back(i.second);
    22         }
    23         return res;
    24     }
    25 };
  • 相关阅读:
    计算机故障
    线程池&进程池
    机箱-网卡-声卡-显卡-显示器
    scrapy请求传参-BOSS反爬
    计算机硬件-主板
    计算机硬件-内存
    计算机硬件-硬盘
    计算机硬件-CPU
    ZJNU 1223
    ZJNU 1217
  • 原文地址:https://www.cnblogs.com/fenshen371/p/5167913.html
Copyright © 2011-2022 走看看