一文刷题学懂(哈希表)——java+python——1/2

一、字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 1:
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]

示例 2:
输入: strs = [“”]
输出: [[“”]]

示例 3:
输入: strs = [“a”]
输出: [[“a”]]
1.Java解答

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        //排序 ,排序后的字符串作为哈希表的键
        Map<String, List<String>> map = new HashMap<String, List<String>>();
        for(String str :strs){
            char[] array =str.toCharArray();
            Arrays.sort(array);
            String key= new String(array);
            List<String> list = map.getOrDefault(key ,new ArrayList<String>());
            list.add(str);
            map.put(key,list);
        }
        return new ArrayList<List<String>>(map.values());

    }
}

2.python解答

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        dict = {}
        for item in strs:
            key =tuple(sorted(item))
            dict[key] = dict.get(key,[])+[item]
        return list(dict.values())



3.主要思想
这个题目是用于对给定字符串数组中的字符串进行分组,使得由相同字符组成的字符串被归类到同一个组中。具体来说,它通过将每个字符串排序,然后使用排序后的字符串作为哈希表的键,将具有相同排序后的字符串的原始字符串归为一组。

  1. Map<String, List<String>> map = new HashMap<String, List<String>>();: 这行代码创建了一个哈希表(HashMap),其中键为字符串,值为字符串列表。这个哈希表用于存储分组后的字符串,其中键是排序后的字符串,值是由相同排序后的字符串组成的字符串列表。

  2. "Map":在 Java 中,Map 是一种键值对的数据结构,它允许将键映射到值。在这里,我们使用 Map 来存储分组后的结果。

  3. "HashMap"HashMap 是 Java 中 Map 接口的一个实现,它基于哈希表实现了 Map 的接口。哈希表通过将键的哈希码映射到数组索引来实现快速的键值查找。这里我们使用 HashMap 来存储键值对的分组结果。

  4. "List<String>"List 是 Java 中的一个接口,它表示一个有序的元素集合。在这里,我们使用 List<String> 表示一个由字符串组成的列表,用于存储分组后的字符串。

  5. "String[]"String[] 表示一个字符串数组,即包含多个字符串的数组。

  6. strs:这是一个输入参数,表示需要进行分组的字符串数组。

  7. 排序:在代码中使用了排序算法来对字符串进行排序。排序后,由相同字符组成的字符串将具有相同的排序后的字符串。

  8. 哈希表(HashMap):哈希表是一种常见的数据结构,用于实现键值对的存储和查找。在这里,我们使用哈希表来实现分组后的字符串的存储,以便能够快速地根据排序后的字符串查找相应的字符串列表。

  9. 键值对(key-value pair):在哈希表中,每个元素都是一个键值对,其中键用于唯一地标识值。在这里,键是排序后的字符串,值是由相同排序后的字符串组成的字符串列表。

这段代码的主要思想是利用哈希表来实现分组,通过将每个字符串排序后作为键,将具有相同排序后的字符串的原始字符串归为一组。

4.对比知识
HashMapTreeMapLinkedHashMap 是 Java 中常见的三种 Map 接口的实现类,它们各自具有不同的特点和适用场景:

  1. HashMap

    • 使用哈希表实现,以键的哈希值为索引,查找速度快。
    • 不保证元素的顺序,即遍历顺序可能与插入顺序不同。
    • 允许键和值为 null。
    • 适用于大多数情况下的键值对存储和检索。
  2. TreeMap

    • 基于红黑树实现,以键的自然顺序或者通过 Comparator 指定的顺序进行排序。
    • 可以保证元素按照键的顺序排列。
    • 不允许键为 null,但允许值为 null。
    • 适用于需要有序存储键值对的场景。
  3. LinkedHashMap

    • 继承自 HashMap,在 HashMap 的基础上增加了双向链表维护键值对的插入顺序。
    • 可以保证遍历顺序与插入顺序一致。
    • 允许键和值为 null。
    • 适用于需要保持插入顺序的场景。

根据具体的需求和性能要求,可以选择合适的 Map 实现类来存储和操作键值对。

  • 30
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值