【24】49. Group Anagrams

49. Group Anagrams

  • Total Accepted: 114214
  • Total Submissions: 354423
  • Difficulty: Medium
  • Contributors: Admin

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: All inputs will be in lower-case.

 1 class Solution {
 2 public:
 3     vector<vector<string>> groupAnagrams(vector<string>& strs) {
 4         //哈希表建立的不是对每个字符串来说字母与个数的映射
 5         //而是所有的字符串排序好后 字符串与其下标list的映射
 6         /*
 7         unordered_map<string, vector<int>> m;
 8         vector<vector<string>> res;
 9         vector<string> level;
10         for(int i = 0; i < strs.size(); i++){
11             string s = strs[i];
12             sort(s.begin(), s.end());
13             m[s].push_back(i);
14         }
15         
16         for(unordered_map<string, vector<int>>::iterator it = m.begin(); it != m.end(); it++){
17             if(it -> second.size() > 0){
18                 for(int i = 0; i < it -> second.size(); i++){
19                     level.push_back(strs[it -> second[i]]);
20                 }
21                 //res.push_back(level);
22             }
23             res.push_back(level);
24         }
25         return res;*/
26         
27         
28         
29         unordered_map<string, vector<string>> m;
30         vector<vector<string>> res;
31         
32         for(int i = 0; i < strs.size(); i++){
33             string s = strs[i];
34             sort(s.begin(), s.end());
35             m[s].push_back(strs[i]);
36         }
37         
38         for(auto a : m){
39             vector<string> level = a.second;//这里a不是iterator指针 所以他的second用.来读取
40             res.push_back(level);
41         }
42         return res;
43     }
44 };

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2017-02-07 10:53  会咬人的兔子  阅读(132)  评论(0编辑  收藏  举报