Leetcode:49. Group Anagrams

Description

Given an array of strings, group anagrams together.

Example

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

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

思路

  • 思路一:用map实现,先将每个字符串转换为一个map<char,int>,然后通过一个map<map<char,int>, int> 判断是否重复,然后在此基础上操作
  • 思路二,unordered_map<string,int>实现

代码

  • map<map<char,int>, int> 实现,102ms
class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        vector<vector<string>> res;
        int len = strs.size();
        if(len == 0) return res;
        
        map<map<char, int>, int> Map;
        map<char, int> tmpMap;
        int start = 0;
        for(int i = 0; i < len; ++i){
            tmpMap.clear();
            for(int j = 0; j < strs[i].size(); ++j)
                tmpMap[strs[i][j]]++;
                
            if(Map.count(tmpMap) > 0)
                res[Map[tmpMap]].push_back(strs[i]);
            else{
                vector<string> strTmp;
                strTmp.push_back(strs[i]);
                res.push_back(strTmp);
                Map.insert(pair<map<char,int>, int>(tmpMap, start));
                start++;
            }
        }
        
        return res;
    }
};
  • unordered_map <string, int> 实现,39ms
class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        vector<vector<string>> res;
        int len = strs.size();
        if(len == 0) return res;
        
        unordered_map<string, int> Map;
        string tmpMap;
        int start = 0;
        for(int i = 0; i < len; ++i){
            tmpMap = strs[i];
            sort(tmpMap.begin(), tmpMap.end());
            //for(int j = 0; j < strs[i].size(); ++j)
             //   tmpMap[strs[i][j]]++;
                
            if(Map.count(tmpMap) > 0)
                res[Map[tmpMap]].push_back(strs[i]);
            else{
                vector<string> strTmp;
                strTmp.push_back(strs[i]);
                res.push_back(strTmp);
                Map.insert(pair<string, int>(tmpMap, start));
                start++;
            }
        }
        
        return res;
    }
};
posted @ 2017-05-13 10:33  JeffLai  阅读(171)  评论(0编辑  收藏  举报