女朋友要和我分手?!!居然是因为交不出赎金信,不会用哈希表😭😭😭

引言

大家好啊,我是前端拿破轮😁。

跟着卡哥学算法有一段时间了,通过代码随想录的学习,受益匪浅,首先向卡哥致敬🫡。

但是在学习过程中我也发现了一些问题,很多当时理解了并且AC的题目过一段时间就又忘记了,或者不能完美的写出来。根据费曼学习法 ,光有输入的知识掌握的是不够牢靠的,所以我决定按照代码随想录的顺序,输出自己的刷题总结和思考 。同时,由于以前学习过程使用的是JavaScript,而在2025年的今天,TypeScript几乎成了必备项,所以本专题内容也将使用TypeScript,来巩固自己的TypeScript语言能力。

题目信息

赎金信

leetcode题目链接

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。

如果可以,返回 true ;否则返回 false 。

magazine 中的每个字符只能在 ransomNote 中使用一次。

题目分析

本题是典型的哈希表 类的题目。因为要判断某些东西是否出现过,以及出现的次数

本质上,本题就是要判断能否用magazine中的字符构成ransomNote且每个字符只能用一次。所以,只需要要遍历magazine,利用哈希表存储其中字符出现的次数,然后再遍历ransomNote如果出现了magazine中没有的字符,或者数量超出,则直接剪枝,返回false。否则,将map中的记录-1,继续向后遍历。

当整个遍历完成也没有中途返回false,则说明符合要求,直接返回true.

题解

ts 复制代码
function canConstruct(ransomNote: string, magazine: string): boolean {
    // map对象存储magazine中的字符出现次数
    const map: Map<string, number> = new Map();

    for (const c of magazine) {
        map.set(c, (map.get(c) || 0) + 1);
    }

    // 遍历ransomNote,将对应的字符串减1
    for (const c of ransomNote) {
        if (!map.has(c) || map.get(c) === 0) return false;
        map.set(c, (map.get(c)) - 1);
    }
    return true;
};

时间复杂度: O(n + m),其中n和m分别是magazineransomNote的长度。

空间复杂度: O(n). 利用一个map对象来统计magazine中各字符出现的次数。

总结

本题属于简单题目,初次遇到可能感觉难以下手,但是一旦对哈希表内容熟悉,并清楚哈希表就是用在判断某个东西是否出现过以及出现次数的题目中的话,就会条件反射地想到使用该方式来进行解题。

好了,这篇文章就到这里啦,如果对您有所帮助,欢迎点赞,收藏,分享👍👍👍。您的认可是我更新的最大动力。由于笔者水平有限,难免有疏漏不足之处,欢迎各位大佬评论区指正。

往期推荐✨✨✨

我是前端拿破轮,关注我,一起学习前端知识,我们下期见!

相关推荐
大数据魔法师35 分钟前
基于Pandas和FineBI的昆明职位数据分析与可视化实现(五) - 基于随机森林算法预测职位分类
算法·pandas
楼田莉子37 分钟前
数据学习之队列
c语言·开发语言·数据结构·学习·算法
让我们一起加油好吗1 小时前
【基础算法】贪心 (四) :区间问题
c++·算法·贪心算法·洛谷
张志鹏PHP全栈1 小时前
TypeScript 第四天,TypeScript的编译选项(一)
前端·typescript
孤独的追光者2 小时前
论文阅读|汽车虚拟环绕音响系统设计与实现策略的比较研究
算法·汽车·音频·信号处理·数字信号处理
黄皮の电气鼠2 小时前
C++:继承
开发语言·c++·算法
shylyly_2 小时前
专题一_双指针_查找总价格为目标值的两个商品
c++·算法·leetcode·双指针·查找总价格为目标值的两个商品·和为s的两个数
zzj_2626102 小时前
高精度乘法
算法
我尽力学2 小时前
HashMap的get、put流程源码分析
算法·哈希算法
IT猿手3 小时前
2025最新智能优化算法:沙狐优化(Rüppell‘s Fox Optimizer,RFO)算法求解23个经典函数测试集,完整MATLAB代码
android·算法·matlab·迁移学习·优化算法·动态多目标优化·动态多目标进化算法