1.题目

给你一个字符串数组,请将这个数组按照 字母异位词 组合在一起。

字母异位词 是字母相同,但顺序不同的单词。如:ate 和eat(字母都为a、e、t,但排列顺序不同)

2.示例

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

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

3.个人解法

第二天,成功pdf,已经汗流浃背了……

4.官方解法

排序思想:将字符串数组中的字符串进行排序,因为不同排列顺序的字符串,将其排好序后,结果一定相同。将排好序的字符串作为key,将原字符串作为value放入哈希表中。以此实现分门别类

学习的点:HashMap、List、Arrarys、数据类型之间的转换手法

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        //声明一个key——value的结果集,如 {"str1":["value1","value2"]}
        HashMap<String, ArrayList> result = new HashMap<>();
        //遍历字符串数组
        for(String s : strs){
            char[] temp = s.toCharArray(); //将字符串转为字符数组
            Arrays.sort(temp); //转换的目的 :调用数组的排序方法
            String key = new String(temp); //将排完序的字符数组再转换回字符串
            if(!result.containsKey(key)){
                result.put(key,new ArrayList<>()); //放入键和空值
            }
            result.get(key).add(s); //将原值添加到value中
        }

        return new ArrayList(result.values()); //其value为最后的结果
    }
}