49. 字母异位词分组
思路
使用哈希表(HashMap)
- Key:每个字符串排序后的字符数组(如
"eat"→"aet") - Value:具有相同 Key 的原字符串组成的 List
这样,只要两个字符串是字母异位词,它们排序后得到的 Key 就是一样的,就可以被归为一组。
复杂度分析
- 时间复杂度:O(N*KlogK),其中 N 是字符串数量,K 是字符串最大长度
- 空间复杂度:O(N*K),存储所有字符串
代码
import java.util.*;
import java.util.stream.*;
public class GroupAnagrams {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, List<String>> map = new HashMap<>();
for (String str : strs) {
// 将字符串转为字符数组并排序,作为 key
char[] chars = str.toCharArray();
Arrays.sort(chars);
String key = new String(chars);
// 如果 key 不存在,创建一个新的 list
map.putIfAbsent(key, new ArrayList<>());
// 把原字符串加入对应组中
map.get(key).add(str);
}
// 返回所有的 value 组成的 list
return new ArrayList<>(map.values());
}
}

浙公网安备 33010602011771号