题目链接
思路:
因为需要将字符串数组中的所有的相同字母组成的单词进行分组,那么对每一个字符串进行排序后,相同字母组成的字符串一定相同,利用这个性质,即可完成此题。
详细请看代码注解
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> ans = new ArrayList<>();
if (strs == null || strs.length == 0) {
return ans;
}
// 准备一个hashmap来存储相同字母组成的单词列表
HashMap<String, List<String>> map = new HashMap<>();
for (int i = 0; i < strs.length; i++) {
// 每一个字符串先转为字符数组,因为需要排序
char[] ch = strs[i].toCharArray();
// 对字符数组进行排序
Arrays.sort(ch);
// 拿到排序后的字符数组的字符串结果
String key = String.valueOf(ch);
// 若当前hashmap中不存在该字符串,则添加进去
if (!map.containsKey(key)) {
map.put(key, new ArrayList<>());
}
// 将当前字符串添加进相同字母组成的链表中
map.get(key).add(strs[i]);
}
ans = new ArrayList<>(map.values());
return ans;
}