leetcode 49.字母异位词分组

leetcode 49.字母异位词分组

题干

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

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

示例 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] 仅包含小写字母

解题

思路:利用哈希表键值对,键取每个字符串的tochararray方法后再sort排序,值取与键对应的字符串数组,最后返回一个字符串数组列表,用哈希表的values初始化。

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        //样例strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
        //输出[["bat"],["nat","tan"],["ate","eat","tea"]]
        //定义一个哈希表,要实现子键值对是"ant",["nat","tan"]这种形式
        HashMap<String, List<String>> tempmap = new HashMap<String, List<String>>();
        for(String str:strs){
            //遍历字符串数组
            char[] array=str.toCharArray();
            Arrays.sort(array);
            String key=new String(array);
            //至此"eat"转成"aet"
            List<String>list= tempmap.getOrDefault(key,new ArrayList<>());
            //list获取到tempmap中键为"aet"的值,返回一个列表[]
            list.add(str);
            /*put会覆盖,比如说原来哈希表里是key:"aet",values:["eat"],put进去"aet",["eat","ate"],就变成key:"aet",values:["eat","ate"]*/
            tempmap.put(key,list);
        }
        return new ArrayList<List<String>>(tempmap.values());
    }
}
posted @ 2024-08-18 19:17  vast_joy  阅读(26)  评论(0)    收藏  举报