力扣100题哈希-字母异位词分组

144 阅读1分钟

题目:字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

示例 2:

输入: strs = [""]
输出: [[""]]

思路:

  • 思路:遍历字符串数组,将字符串数组中每个元素转换为字符数组,通过Arrays.sort方法进行排序
  • 创建一个满足条件的map集合 key是排序后的字符数组中的元素,通过map.getOrDefault方法,判断是否有相同的key值
  • 如果没有,就存入一个新的ArrayList集合中,有key就存入key对应的list集合中
    public static List<List<String>> groupAnagrams(String[] strs) {
        // 定义一个满足条件的map集合
        Map<String ,List<List<String>>> map = new HashMap<>();
        for(String str: strs) {
            char [] ch  = str.toCharArray();
            // 将字符串进行排序
            Arrays.sort(ch);
            String key = new String(ch);
            List list = map.getOrDefault(key,new ArrayList<>());
            list.add(str);
            map.put(key,list);
        }
           return new ArrayList(map.values());
    }

数组与map集合的遍历方式

map集合的遍历方式(jdk8)

map.forEach((k,v)->{})

数组的遍历

String [] strs = new String[2];
for(String str : strs) {};