• 2.5

    • 忘记了用 map 来存储模板和 list 字符串
    • 忘了 map。getvalues()就是取出 map 的全部value
  • 1.22

    • 忘记 getOrDefault 的用法了、
    • 最后 return 的时候是 ArrayList<…>(…)
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String,List<String>> map = new HashMap<>();
        for(int i=0;i<strs.length;i++){
            //先取出排序再放回去
            String s = strs[i];
            char[] ch = s.toCharArray();
            Arrays.sort(ch);
            String s2 = Arrays.toString(ch);
            //在 getOrDefault 取出 lsit
            List<String> list = map.getOrDefault(s2,new ArrayList<>());
            list.add(s);
            map.put(s2,list);
        }
        return new ArrayList<List<String>>(map.values());
    }
}

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

输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]

12.20

  • api 有点多,看下面 总结吧
    • 要求掌握:string 变 char 数组,char 数组的排序,在变回 str还有一个 Arrays 的工具类
    • hashmap 的 getOrDefalut 用法
    • 返回一个 List<List<String>>的(map.values() )
      • Java 的 API 允许你直接用一个集合(这里是 map.values())来初始化另一个集合(这里是 ArrayList)。它会自动处理所有的迭代和拷贝工作,包含了所有的 Keys 下对应的 Values,这就是为什么一行代码就能搞定。
    • 关于 toString 的用法能用 (有重写):StringBuilder、ArrayList、HashMap、Integer、以及你自己写了 public String toString() {...} 的类。
  • 不能用 (用默认)所有的数组 (char[], int[], String[] 等)。
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        // List<List<String>> res = new ArrayList<>();
        Map<String,List<String>> map = new HashMap<>();
        for(String str :strs){
            char[] charList = str.toCharArray();
            Arrays.sort(charList);
            // String string = charList.toString();
            String string = new String(charList);
            List<String> list = map.getOrDefault(string,new ArrayList<>());
            list.add(str);
            map.put(string,list);
        }
        return new ArrayList<List<String>> (map.values());
    }
}

知识点

  1. 创建Map<String,List<String>> map = new HashMap<String,List<Sting>>

  2. 使用str.toCharList方法(字符串转为字符串数组)

  3. 创建char[]字符串数组

  4. 使用Arrays.sort()工具类方法

  5. map.getOrDefault(key,默认值)的工具类方法使用:返回map中值为key的列表如果不存在,返回设置的默认值

  6. list.add()方法

  7. map.put方法

  8. `

     // 返回Map中所有值的集合,即所有字母异位词组的列表
     return new ArrayList<List<String>>(map.values());
    
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        // 创建一个HashMap,用于存储每个字母异位词组的键和对应的字符串列表
        Map<String, List<String>> map = new HashMap<String, List<String>>();
 
        // 遍历输入的字符串数组
        for (String str : strs) {
            // 将字符串转换为字符数组
            char[] array = str.toCharArray();
            // 对字符数组进行排序
            Arrays.sort(array);
            // 将排序后的字符数组转换回字符串,作为键
            String key = new String(array);
            // 从Map中获取与键关联的列表,如果不存在则创建一个新的列表
            List<String> list = map.getOrDefault(key, new ArrayList<String>());
            // 将当前字符串添加到列表中
            list.add(str);
            // 将更新后的列表放回Map中
            map.put(key, list);
        }
 
        // 返回Map中所有值的集合,即所有字母异位词组的列表
        return new ArrayList<List<String>>(map.values());
    }
}