写点什么

精选算法面试 - 哈希表 II

用户头像
李孟
关注
发布于: 2021 年 01 月 17 日
精选算法面试-哈希表II

一.示例

1.1 字母异位词分组

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

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

输出:

[

["ate","eat","tea"],

["nat","tan"],

["bat"]

]


实现 1

public List<List<String>> groupAnagrams(String[] strs) {    List<List<String>> res = new ArrayList<>();    HashSet<HashMap<Character,Integer>> lookup = new HashSet<>();    for(int i = 0; i < strs.length; i++)    {        HashMap<Character, Integer> map = scanWord(strs[i]);        lookup.add(map);		//扫描每一个字符串,拿到对应的map, 也就是每个串子的字符数量    }    for(HashMap<Character,Integer> map : lookup)    {        List<String> path = new ArrayList<>();        for(int i  = 0; i < strs.length; i++)        {            if(map.equals(scanWord(strs[i])))	//如果发现该串和我们比较的map一样,说明是Anagram                path.add(strs[i]);        }        res.add(path);    }    return res;}public HashMap<Character, Integer> scanWord(String s){    HashMap<Character, Integer> map = new HashMap<>();    for(int i = 0; i < s.length(); i++)         map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1);    return map;}
复制代码


实现 2

/*	将上面的两步循环,合成一步,边找变价*/public List<List<String>> groupAnagrams(String[] strs) {    List<List<String>> res = new ArrayList<>();    HashMap<HashMap<Character,Integer>, List<String>> lookup = new HashMap<>();
    for(int i = 0; i < strs.length; i++)    {        HashMap<Character, Integer> map = scanWord(strs[i]);        if(!lookup.containsKey(map))                lookup.put(map, new ArrayList<>());        lookup.get(map).add(strs[i]);    }    for(List<String> ls : lookup.values())        res.add(ls);    return res;}public HashMap<Character, Integer> scanWord(String s){    HashMap<Character, Integer> map = new HashMap<>();    for(int i = 0; i < s.length(); i++)        map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1);    return map;}
复制代码


参考

https://leetcode-cn.com/problems/group-anagrams/

发布于: 2021 年 01 月 17 日阅读数: 20
用户头像

李孟

关注

还未添加个人签名 2017.10.18 加入

数据工程师 https://limeng.blog.csdn.net/

评论

发布
暂无评论
精选算法面试-哈希表II