62 分类: 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] 仅包含小写字母
//方法1:以排序后的字符串为key,以相同的字符串的List为value
//        对于每个单词进行排序,与Map中的key比较,相同则加入到value的List中

//方法2:改排序,用字母数组为哈希表,对于每个单词字母填入哈希表,通过哈希表重建单词,相同则加入List中,代码框架相同

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String,List<String>> map=new HashMap<>();
        for(String str:strs){
            char[] ch=str.toCharArray();
            Arrays.sort(ch);
            List<String> list=map.getOrDefault(new String(ch),new ArrayList<String>());//没有则返回一个空List
            list.add(str);
            map.put(new String(ch),list);//value会被新值替代,并返回旧value
        }
        return new ArrayList<List<String>>(map.values());
    }
}

#none

作者: zyk的zone

版权: 除特别声明,均采用BY-NC-SA 4.0许可协议,转载请表明出处

目录Content

-->