1. 程式人生 > >[LeetCode] 49. Group Anagrams 分組變位詞

[LeetCode] 49. Group Anagrams 分組變位詞

就是 auto contains else push tor HA eth 字符串

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.

給一個含字符串的數組,字符串是變位詞的分在一組,返回所有分組。變位詞就是一個單詞通過改變單詞當中的字母順序變成另外一個單詞。

Java:

public List<List<String>> groupAnagrams(String[] strs){  
    List<List<String>> lists=new ArrayList<List<String>>();  
    Map<String,List<String>> map=new HashMap<String,List<String>>();  
    for(String str:strs){  
        char[] chs=str.toCharArray();  
        Arrays.sort(chs);  
        String tmp=new String(chs);  
        if(map.containsKey(tmp))  
            map.get(tmp).add(str);  
        else{  
            List<String> list=new ArrayList<String>();  
            list.add(str);  
            map.put(tmp, list);  
        }  
    }  
    for(String str:map.keySet()){  
        lists.add(map.get(str));  
    }  
    return lists;  
}

Java:

public class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> map = new HashMap<>();
        for (String s : strs) {
            char[] sc = s.toCharArray();
            Arrays.sort(sc);
            String key = String.valueOf(sc);
            map.putIfAbsent(key, new ArrayList<>());
            map.get(key).add(s);
        }
        return new ArrayList<>(map.values());
    }
}

Python:HashMap

class Solution(object):
    def groupAnagrams(self, strs):
        anagrams_map, result = collections.defaultdict(list), []

        for s in strs:
            sorted_str = ("").join(sorted(s))
            anagrams_map[sorted_str].append(s)

        for anagram in anagrams_map.values():
            anagram.sort()
            result.append(anagram)
        return result

C++:

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        vector<vector<string>> res;
        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) {
            res.push_back(a.second);
        }
        return res;
    }
};

C++:Array

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        vector<vector<string>> res;
        unordered_map<string, vector<string>> m;
        for (string str : strs) {
            vector<int> cnt(26, 0);
            string t = "";
            for (char c : str) ++cnt[c - ‘a‘];
            for (int d : cnt) t += to_string(d) + "/";
            m[t].push_back(str);
        }
        for (auto a : m) {
            res.push_back(a.second);
        }
        return res;
    }
};

  

  

  

[LeetCode] 49. Group Anagrams 分組變位詞