字母异位词分组
1. 题目描述
提示
题目链接:https://leetcode.cn/problems/group-anagrams/description/
2. 解题思路
核心总结
- 寻找灵魂指纹:将单词字符排序后作为
HashMap 的 Key。所有互为异位词的单词排序后结果一致,从而可以归入同一个 List。
💡 易错点
Java 中 Arrays.toString() 拿到的是内存地址,必须用 String.valueOf(charArray) 获取内容字符串作为 Key。
3. 代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
if(strs == null || strs.length == 0) {return new ArrayList<>();}
Map<String,List<String>> map = new HashMap();
for(String s : strs){
char[] ch = s.toCharArray();
Arrays.sort(ch);
String key = String.valueOf(ch);
map.computeIfAbsent(key,k->new ArrayList<>()).add(s);
}
return new ArrayList<>(map.values());
}
}
|
4. 复杂度分析
- 时间复杂度:$O(n)$
- 空间复杂度:$O(1)$
5. 总结与反思