/**
* 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
*/
public List<List<String>> groupAnagrams(String[] strs) {
//使用HashMap存储,键存储字母异位词的相同点,值存储这一组异位词
HashMap<String, List<String>> map = new HashMap<>();
//遍历字符串数组
for (String str : strs) {
//将字符串转化为字符数组
char[] chars = str.toCharArray();
//调用排序方法
Arrays.sort(chars);
//将排序后的字符数组构成一个特征值字符串
String s = new String(chars);
//注意:
//对这个方法的理解
//getOrDefault(Object key, V defaultValue)
//返回到指定键所映射的值,或 defaultValue如果此映射包含该键的映射。
//即如果字符串s相同,返回的就是同一个list
List<String> list = map.getOrDefault(s, new ArrayList<String>());
//将具有相同特征的字符串添加
list.add(str);
//然后将特征值和list添加到map中
map.put(s,list);
}
//最后将hashMap中的list以集合的形式返回
return new ArrayList<List<String>>(map.values());
}
原文:https://www.cnblogs.com/mx-info/p/14727008.html