2.字母异位词分组

发布时间 2023-10-29 16:04:36作者: BkDench

题目概述:给定一字符串数组。规定由相同字母构成的字符串为同一组,问该字符串数组最终分为几组,返回分完组后的一个二维数组
解题思路:由题意可得:如果两个字符串属于同一组,那么它们必定是由相同字符构成,即对该字符串进行排序后,两个字符串应该是相同的。因此,我们只需对每个字符串先进行排序处理,用map集合进行维护,查询集合中是否由该字符串对应的分组,如果有,直接将该字符串加入分组中;否则,创建一个新的分组。
知识点:创建二维数组,熟悉集合使用。

map.getOrDefault(Object key,V defaultvalue);
作用:如果map集合中存在key,则返回该key值对应的value;否则返回defaultvalue值。注意:defaultvalue的类型要和map定义时的类型一致或者兼容。可以替代if-else判断语句,减少代码量。

代码

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        //用HashMap进行维护,父类接口引用子类对象
        Map<String,List<String>>map = new HashMap<String,List<String>>();
        for(int i = 0; i < strs.length; i ++){
            //转换为字符数组,方便排序
            char str[] = strs[i].toCharArray();
            //调用数组排序方法
            Arrays.sort(str);
            String key = new String(str);

            List<String> list = map.getOrDefault(key,new ArrayList<String>());
            list.add(strs[i]);
            //更新map
            map.put(key,list);
        }
        //返回一个二维数组
    return new ArrayList<List<String>>(map.values());
    }

}