LeetCode 49. Group Anagrams 字母异位词分组(Java)

题目:

Given an array of strings, group anagrams together.

Example:
Input: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
Output:
[
[“ate”,“eat”,“tea”],
[“nat”,“tan”],
[“bat”]
]

Note:

  • All inputs will be in lowercase.
  • The order of your output does not matter.

解答:

本题采用HashMap>来存储映射,其中键值是将字符串通过 Arrays.sort() 排序后存入,每次读入字符串都先对字符进行排序后再在 map 中查找。

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        HashMap<String, List<String>> map = new HashMap<>();
        for(int i=0; i<strs.length; i++) {
            char[] ch = strs[i].toCharArray();
            Arrays.sort(ch);
            //String str = Arrays.toString(ch);
            String str = new String(ch);
            if(map.containsKey(str)) {
                map.get(str).add(strs[i]);
            } else {
                List<String> temp = new ArrayList<>();
                temp.add(strs[i]);
                map.put(str,temp);
            }
        }
        return new ArrayList(map.values());
    }
}

注意:数组转换为字符串

一开始做题时忽略了这点,直接使用的String str = ch.toString(),导致错误。直接使用 toString() 方法只会打印出数组的地址

所以数组转为字符串应采用Arrays.toString(ch),但这种方法的 toString() 是带格式的,输出的是数组类型,该方法支持入参 long,float,double,int,boolean,byte,object 型的数组。

如果想直接输出字符串,则采用两种方法:
方法1:直接在构造String时转换。
char[] = {'a', 'b', 'c'};
String str = new String(ch);
方法2:调用String类的方法转换。
String.valueOf(char[] ch)

public class MyClass {
    public static void main(String[] args) {
        char[] ch = new char[]{'a', 'b', 'c', 'd'};
        
        System.out.println(ch.toString());

        System.out.println(Arrays.toString(ch));

        String str = new String(ch);
        System.out.println(str);

        System.out.println(String.valueOf(ch));
    }
}

输出的结果分别为:
在这里插入图片描述
HashMap.values() 方法
Java 中 HashMap 类的 java.util.HashMap.values() 方法用于从map的值中创建集合。它基本上返回HashMap中值的Collection视图。
比如本题中,可以通过List> res = new ArrayList<>(map.values());来获取最终结果

public class MyClass {
    public static void main(String[] args) {
        HashMap<Integer, String> map = new HashMap<>();

        map.put(1, "aaa");
        map.put(2, "bbb");
        map.put(3, "ccc");
        map.put(4, "ddd");
        map.put(5, "eee");

        // Displaying the HashMap
        System.out.println("Initial Mappings are: " + map);

        // Using values() to get the set view of values
        System.out.println("The collection is: " + map.values());
    }
}

输出结果为:
在这里插入图片描述

你可能感兴趣的:(LeetCode)