查詢表類演算法//字母異位詞分組
阿新 • • 發佈:2018-11-11
給定一個字串陣列,將字母異位詞組合在一起。字母異位詞指字母相同,但排列不同的字串。
示例:
輸入: ["eat", "tea", "tan", "ate", "nat", "bat"]
,
輸出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
說明:
- 所有輸入均為小寫字母。
- 不考慮答案輸出的順序。
給定一個字串陣列,將字母異位詞組合在一起。字母異位詞指字母相同,但排列不同的字串。
示例:
輸入:
["eat", "tea", "tan", "ate", "nat", "bat"]
, 輸出: [ ["ate","eat","tea"], ["nat","tan"], ["bat"] ]說明:
- 所有輸入均為小寫字母。
- 不考慮答案輸出的順序。
class Solution { public List<List<String>> groupAnagrams(String[] strs) { if(strs == null || strs.length == 0) return new ArrayList<List<String>>(); Map<String,List<String>> map = new HashMap<String,List<String>>(); for(String s:strs){ char[] ca = s.toCharArray(); Arrays.sort(ca); String keyStr = String.valueOf(ca); if(!map.containsKey(keyStr)){ map.put(keyStr,new ArrayList<String>()); } map.get(keyStr).add(s); } return new ArrayList<List<String>>(map.values()); } }
class Solution { public: vector<vector<string>> groupAnagrams(vector<string>& strs) { vector<vector<string>> res; unordered_map<string,vector<string>> m; for(auto str:strs){ string temp = str; sort(temp.begin(), temp.end()); m[temp].push_back(str); } for(auto i:m){ res.push_back(i.second); } return res; } };