leetcode49. 字母异位词分组

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

字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/group-anagrams
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

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

解题思路:

  1. 对于strs中字母异位的每个字符串:"nat","tan",将其转换为char数组并进行排序后对应的数组是相同的:ant。
  2. 后再用String.valueOf()将char数组参数转换为字符串形式变为key键。
  3. 检查map中是否包含上述过程中的key,若不包含则将key作为新的键放入map中并创建新的List用来存放该key的异位单词。若包含key,则将形成该key的str放入List中(k:ant,v:"nat","tan")。
  4. 返回map.values();
public char[] toCharArray()
将此字符串转换为新的字符数组。
结果
新分配的字符数组,其长度为此字符串的长度,其内容初始化为包含此字符串表示的字符序列。
public static String valueOf​(char[] data)
返回char数组参数的字符串表示形式。 复制字符数组的内容; 后续修改字符数组不会影响返回的字符串。
参数
data - 字符数组。
结果
a String ,包含字符数组的字符。
class Solution {
    public List> groupAnagrams(String[] strs) {
        HashMap> map=new HashMap<>();
        for(String str:strs){
            char[] ch=str.toCharArray();
            Arrays.sort(ch);
            String key=String.valueOf(ch);
            if(!map.containsKey(key)){
                map.put(key,new ArrayList<>());
            }
            map.get(key).add(str);
        }
        return new ArrayList(map.values());
    }
}

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