题目
Given an array of strings, group anagrams together.
For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"]
,
Return:
1 2 3 4 5
| [ ["ate", "eat","tea"], ["nat","tan"], ["bat"] ]
|
大意
找出字符相同的所有字符串,归为一组.
答案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class Solution { public: vector<vector<string>> groupAnagrams(vector<string>& strs) { int len = strs.size(); vector<vector<string> > res; map<string,vector<string>> maps; for(int i=0;i<len;i++) { string s =strs[i]; sort(s.begin(),s.end()); maps[s].push_back(strs[i]); } for (map<string, vector<string> >::iterator iter = maps.begin(); iter != maps.end(); iter++) res.push_back(iter->second); return res; } };
|
思路
穷举会超时,所以这道题要使用哈希表,每个字符串的每个单词进行排序,排序完成后放到相应的map中.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public 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()); } }
|