哈希映射可以很好地按键分组信息。但是我们不能直接使用原始字符串作为键。我们必须设计一个合适的键来呈现字母异位词的类型。例如,有字符串 “eat” 和 “ate” 应该在同一组中。但是 “eat” 和 “act” 不应该组合在一起。
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: ["eat", "tea", "tan", "ate", "nat", "bat"]
,
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
代码:
class Solution {
public List> groupAnagrams(String[] strs) {
List> list = new ArrayList>();
int len = strs.length;
if(len<1){
return list;
}
Map> map = new HashMap<>();//key=排好序的字符 value = 相同字母的list集合
String temp = "";
for(int i=0;i l = new ArrayList<>();
l.add(strs[i]);
map.put(temp,l);
}
}
for(String key:map.keySet()){
list.add(map.get(key));
}
return list;
}
}
参考:https://blog.csdn.net/xushiyu1996818/article/details/83617934
补充:
1 Java的Arrays类中有一个sort()方法,该方法是Arrays类的静态方法,在需要对数组进行排序时,非常的好用。
但是sort()的参数有好几种,基本上是大同小异,下面是以int型数组为例的Arrays.sort()的典型用法
增序排列:
int[] ints=new int[]{2,324,4,57,1};
Arrays.sort(ints);
降序排列:(依赖Comparator)
Integer[] integers=new Integer[]{2,324,4,4,6,1};
Arrays.sort(integers, new Comparator(){
public int compare(Integer o1, Integer o2){
return o2-o1;
}
}});
数组的指定位排序:
int[] ints2=new int[]{212,43,2,324,4,4,57,1};
//对数组的[2,6)位进行排序
Arrays.sort(ints2,2,6);
2
采用HashMap
用sort后的字符串作为key,把sort后相同的字符存到字符串集合的list作为value。
最后遍历hashmap,把value添加到结果集中