SummerXinBing / xiabing_wuji

学习仓库,用此来驱动自己
Apache License 2.0
0 stars 0 forks source link

字母异位词分组 #21

Closed SummerXinBing closed 5 months ago

SummerXinBing commented 5 months ago

分类问题,可以使用hash; 找到分类问题的共性,然后作为key;分类聚合的list作为value;

算法思路

  1. 每一个str转成一个char数组,然后将数组排序;
  2. 排序后的数组转成String(这就是异位词共同点),作为key;
  3. 计算str的key,key相同的就是一组;一组key放在map的value中
    public static List<List<String>> groupAnagrams(String[] strs) {
        // 异位词字母单词

        // 方法1:每一个str转成一个map,然后将map放在list中,相同的map就是一组

        // 方法2:每一个str转成一个char数组,然后将数组排序;
        // 排序后的数组转成String(这就是异位词共同点),作为key;
        // 计算str的key,key相同的就是一组;一组key放在map的value中

        HashMap<String, List<String>> map = new HashMap<>();
        for (int i = 0; i < strs.length; i++) {
            String str = strs[i];
            char[] charArray = str.toCharArray();
            Arrays.sort(charArray);
            String key = new String(charArray);
            List<String> list = map.getOrDefault(key, new ArrayList<String>());
            list.add(str);
            map.put(key,list);
        }
        ArrayList<List<String>> lists = new ArrayList<>(map.values());
        return lists;
    }