算法-(383哈希表赎金信)

这道题可以利用哈希表来做。我们首先来了解以下哈希表

哈希表是一种强大的数据结构,因为它能够在平均情况下提供常数时间复杂度的查找、插入和删除操作。这使得它在实现字典、集合以及缓存等场景中非常高效。

主要特点

  1. 快速查找:通过哈希函数将键映射到存储位置,可以快速找到对应的值。
  2. 动态调整:多数实现会根据负载因子自动调整大小,以保持高效性能。
  3. 键值存储:适合用于键值对数据。

常见应用

  • 缓存:快速存储和检索数据。
  • 计数:统计元素出现次数。
  • 去重:快速判断元素是否存在。

哈希表在很多编程语言中被广泛使用,如 C++ 的 unordered_map,Python 的 dict 等。

 

哈希表的底层结构通常由以下几个部分组成:

1. 数组

  • 用于存储数据的主要结构。
  • 每个位置称为一个“桶”。

2. 哈希函数

  • 将键映射到数组的索引。
  • 决定元素存储的位置。

3. 处理冲突

由于不同的键可能映射到同一个索引,需要解决冲突:

  • 链地址法:每个桶中存储一个链表或其他结构来处理多个元素。
  • 开放寻址法:寻找下一个空的桶来存储元素。

4. 负载因子

  • 衡量哈希表的填充程度。
  • 超过阈值时会动态扩展数组以保持性能。

5. 再哈希

  • 扩展数组并重新分配元素以减少冲突。
class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
            unordered_map<char,int>charcount;
            //记录ransomNote里面每个字符出现的次数
            for(char c:magazine){
                charcount[c]++;
            }

            //判断magazine字符在ransomNote里面是否存在
            for(char c:ransomNote){
                if(charcount[c]==0){
                    return false;
                }
                charcount[c]--;
            }
            return true;

    }
};

解释

  1. 创建哈希表:使用 unordered_map 来存储 magazine 中每个字符的数量。
  2. 统计字符数量:遍历 magazine,更新每个字符的计数。
  3. 验证字符可用性:遍历 ransomNote,检查并减少对应字符的计数。如果某个字符不够用,直接返回 false
  4. 返回结果:如果所有字符都满足条件,则返回 true
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code apprenticeship

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值