49. 字母异位词分组

image

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());
    }
}

posted @ 2025-08-03 14:40  quanht  阅读(2)  评论(0)    收藏  举报