自己思路:使用 Map<String ,int [] >
数据结构,得出所以字符串 26个英文下标个数,然后 双层循环遍历 (i,j)
,对比 i 和 j 字符对应的 哈希表中数组的内容是否相同,如果是相同的,则加入到一个 list 中,并且 remove掉哈希表中的值。
最后提交没有通过:因为如果是多个空串,都要分到一个list 中。我的程序不能实现。
看题解思路:
使用 Map<String,List<String>>
数据结构,每个字符转成 char []
,然后排序,这样就可以实现每次都能加到 同一个 list 中。
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String,List<String>> map =new HashMap();
for(String str:strs){
char [] a =str.toCharArray();
Arrays.sort(a);
String key =String.valueOf(a);
List<String> list = map.getOrDefault(key,new ArrayList<>());
list.add(str);
map.put(key,list);
}
List<List<String>> res= new ArrayList();
for(String key:map.keySet()) res.add(map.get(key));
return res;
}
}