字母异位词分组
字母异位词分组
题目
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
思路
- 要查询异位词,就可以使用一个map,怎么让不同的异位词的key相同呢?
- 可以把每个字符串进行排序作为他的key,这样不同的异位词key就相等了,然后作为map的key,value是一个数组,装着所有key相同的异位词
解决方案
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> result = new ArrayList<>();
Map<String, List<String>> map = new HashMap<>();
for (String str : strs) {
char[] charArray = str.toCharArray();
Arrays.sort(charArray);
List<String> list = map.getOrDefault(new String(charArray), new ArrayList<>());
list.add(str);
map.put(new String(charArray), list);
}
return new ArrayList<List<String>>(map.values());
}