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

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。



示例 1:

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

输入: strs = [""]
输出: [[""]]
示例 3:

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


提示:

1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i] 仅包含小写字母

题目给了一整个字符串数组,思路有两个, 方法一:遍历整个字符串数组,对数组当中的每个字符串进行重新排序,因为字符串底层不就是字符数组嘛,将排序好的字符串作为Map的键,然后将原先的字符串作为值存入,直到所有数组遍历结束 方法二:就是统计字母嘛,如果字母出现的个数还有次数都相同,就是异位词,但是这个实现我看懂了,但是实际是我并不会,散列表我知道,但是需要根据特征进行归类,模式识别我不太熟悉.

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        //字母排序法
        HashMap<String, List<String>> map = new HashMap<>();//初始化一个哈希表
 
        for (String str : strs) {//遍历整个字符串数组,将每一个数组元素重新排序
            char[] chars = str.toCharArray();//通过String的toCharArray方法,将字符串转换成char数组
            Arrays.sort(chars);//利用Arrays自带的sort排序对字母排序
            String key = new String(chars);//排序后的字符数组做为键
            if (!map.containsKey(key)) {//如果map当中不存在对应的键,那就将其作为新的键名放入,键值是新new出来的List
                map.put(key, new ArrayList<>());//将key放入其中
            }
            map.get(key).add(str);//走到这里,map当中存在键名为"key",获取到key对应的值,即List列表,然后将当前遍历到的字符串存入其中
        }
        return new ArrayList<>(map.values());//待到全部遍历完成,将map对应的值转成数组全部返回
    }
}

另一种不会,等我以后再学学,前面的道路以后再来探索吧

20240919161222