题目链接:力扣
解题思路:字母异位词分组也就是将:字母以及字母个数都相同的单词组合成一组,然后返回结果,比如ate,eat,tea都是由1个a,1个t,1个e组成。
所以,可以先对每个字符串进行排序,则,相同的异位词排序后一定相同,所以可以将排序后形成的新字符串作为key,当前遍历的字符串存在key对应的list中
AC代码
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String ,List<String>> map= new HashMap<>();
for (String str : strs) {
char[] chars = str.toCharArray();
Arrays.sort(chars);
String s = new String(chars);
List<String> list = map.computeIfAbsent(s, (key) -> new LinkedList<>());
list.add(str);
}
return new ArrayList<>(map.values());
}
}
通过流分组的方式
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, List<String>> map = Arrays.stream(strs).collect(Collectors.groupingBy(key->{
char[] chars = key.toCharArray();
Arrays.sort(chars);
return new String(chars);
}));
return new ArrayList<>(map.values());
}
}