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.
这道题刚好前几天面试过,把sort的string作为key存在hashmap,能解决所有的anagram的问题
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
HashMap<String,Integer> map = new HashMap<String,Integer>();
ArrayList<List<String>> res = new ArrayList<List<String>>();
int order = 0;
for(int i=0;i<strs.length;i++){
char[] ca = strs[i].toCharArray();
Arrays.sort(ca);
String keyStr = String.valueOf(ca);
if(map.containsKey(keyStr)){
res.get(map.get(keyStr)).add(strs[i]);
}
else{
map.put(keyStr,order);
ArrayList<String> tm = new ArrayList();
tm.add(strs[i]);
res.add(tm);
order++;
}
}
return res;
}
}
This site Original article All followed" Attribution—NonCommercial—ShareAlike 4.0 (CC BY-NC-SA 4.0) ”。 Please keep the following marks for sharing and interpretation:
Original author: Jake Tao Source: 「49. Group Anagrams」
Post a reply