题目描述
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
示例1
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例2
输入: strs = [""]
输出: [[""]]
示例3
输入: strs = ["a"]
输出: [["a"]]
代码
class Solution {
/*
做题思路:
新建hashMap,key为字符串,value为存放字符串的list
1. 将字符串数组中的每个字符串进行排序,排序后的字符串作为key
2. 若map中不存在该key值,就新建该key对应的list,用来存放字母异位词
3. 若map中存在该key值,就取出key对应的list
4. 将当前字符串添加到对应的list中
5. map中新增键值对(不存在的情况)
*/
/*
知识点:
1. hashmap.getOrDefault(Object key, V defaultValue):获取指定key对应的value,若找不到key,则返回设置的默认值
2. hashmap.put(K key,V value):将指定的key-value键值对插入到hashmap中,若插入的key对应的value已经存在则执行value替换操作,返回旧的 value值;若不存在则执行插入,返回null
3. hashmap.values():返回hashmap中所有value值所组成的集合视图
*/
public List<List<String>> groupAnagrams(String[] strs) {
Map<String,List<String>> map=new HashMap<String,List<String>>();
for(String str:strs){
char[] arr=str.toCharArray();
Arrays.sort(arr);
String key=new String(arr);
List<String> list=map.getOrDefault(key,new ArrayList<String>());
list.add(str);
map.put(key,list);
}
return new ArrayList<List<String>>(map.values());
}
}