[LeetCode] 49. Group Anagrams 分組變位詞
阿新 • • 發佈:2018-03-10
就是 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 分組變位詞