LeetCode 49. 字母异位词分组

原题:
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

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

来源:力扣(LeetCode)
链接:(https://leetcode-cn.com/problems/group-anagrams)

题解:
本题可以采用一个HashMap来存放答案,这些答案中将字母,数量相同字符串归为一类,而这一类的字符串可以用List来联系起来;同时因为这类字符串中各个字符串的字母,数量相同,我们可以将这些字符串转换为字符数组,对其排序,然后将这些排序好的字符数组转化为String类型,以此来作为HashMap的key值;完成这些步骤即可对后面检查的字符串进行对比,完成字符串的分类。

public List> groupAnagrams(String[] strs) {
        if(strs.length == 0) return new ArrayList();
        Map ans = new HashMap();
        for(String s : strs){
            //1.将s转化为字符数组,并排好序
            char[] ch = s.toCharArray();
            Arrays.sort(ch);//对ch排序
            //将排好序的ch转换为String类型
            String key = String.valueOf(ch);
            //2.检索s是否在ans中存在,不存在则建立一个新的key
            if(!ans.containsKey(key)){
                ans.put(key,new ArrayList());
            }
            ans.get(key).add(s);//将s添加入ans对应的key的位置中
        }
        return new ArrayList(ans.values());
    }

你可能感兴趣的:(LeetCode,java)