给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
示例 1:
**输入:** strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
**输出:** [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
**输入:** strs = [""]
**输出:** [[""]]
示例 3:
**输入:** strs = ["a"]
**输出:** [["a"]]
提示:
1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i]
仅包含小写字母
//方法1:以排序后的字符串为key,以相同的字符串的List为value
// 对于每个单词进行排序,与Map中的key比较,相同则加入到value的List中
//方法2:改排序,用字母数组为哈希表,对于每个单词字母填入哈希表,通过哈希表重建单词,相同则加入List中,代码框架相同
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String,List<String>> map=new HashMap<>();
for(String str:strs){
char[] ch=str.toCharArray();
Arrays.sort(ch);
List<String> list=map.getOrDefault(new String(ch),new ArrayList<String>());//没有则返回一个空List
list.add(str);
map.put(new String(ch),list);//value会被新值替代,并返回旧value
}
return new ArrayList<List<String>>(map.values());
}
}