当前位置: 首页 > news >正文

TypeScript算法每日一题:赎金信(383)

作者:前端小王hs

阿里云社区博客专家/清华大学出版社签约作者✍/CSDN百万访问博主/B站千粉前端up主

题库:力扣
题目序号:383(简单)
题目:赎金信

给你两个字符串ransomNote 和 magazine,判断ransomNote能不能由magazine里面的字符构成。
如果可以,返回true;否则返回falsemagazine中的每个字符只能在ransomNote中使用一次。

示例1:
输入:ransomNote = “a”, magazine = “b”
输出:false

示例2:
输入:ransomNote = “aa”, magazine = “aab”
输出:true

解题思路:
通过两道示例可以得知,该题就是判断ransomNote的值是否包含在magazine
解题的思路采取的是哈希表

可能有读者会问,为什么采取哈希表?采取这种方法的理由是什么?
①题目提到了magazine中的每个字符只能在ransomNote中使用一次,这是一个计算题,我们需要计算每个字符出现的次数,那么哈希表刚好可以满足这个需求
②如果对比使用数组,那可能需要采取二维数组的形式去记录字符出现的字数,如[[a,2],[b,1]],提高了复杂度

其实有个最简单的判断思路就是,如果需要统计字符,那么可以首选哈希表

下面来看一下具体的实现过程
①先计算出magazine 中每个字符出现的次数,那么在JS或者TS中就是以对象的形式去模拟哈希表,也就是定义一个对象,对象的属性包括每个字符,属性值则是字符出现的数字

②遍历ransomNote字符串,通过下标获取字符,如果该字符不存在,那么return,反之在哈希表中的对应的字符的数字减1

这么说可能有些抽象,以这个示例2为例
可以得到如下的哈希表

let magazineCounts = {a:2b:1
}

这是第一步

然后就遍历ransomNote字符串
遍历第一次的时候,magazineCounts.a的数量从2变为1
遍历第二次的时候,magazineCounts.a的数量从1变为0
遍历结束,return true

解题代码:

function canConstruct(ransomNote: string, magazine: string): boolean {// 使用对象来记录 magazine 中字符的出现次数const magazineCounts: { [char: string]: number } = {};// 遍历 magazine 字符串,更新字符计数for (let i = 0; i < magazine.length; i++) {const char = magazine[i];magazineCounts[char] = (magazineCounts[char] || 0) + 1;}// 遍历 ransomNote 字符串,减去字符计数for (let i = 0; i < ransomNote.length; i++) {const char = ransomNote[i];  // 如果字符计数小于 0,说明字符不够if (!magazineCounts[char] || magazineCounts[char] < 1) {return false;}// 字符计数减1magazineCounts[char]--}return true;
};

解题过程示例:

http://www.lryc.cn/news/364057.html

相关文章:

  • springboot 作为客户端接收服务端的 tcp 长连接数据,并实现自定义结束符,解决 粘包 半包 问题
  • kuka编程怎么加中文:解锁KUKA机器人编程中的中文支持
  • hadoop集群中zookeeper的搭建与原理解释
  • HTML静态网页成品作业(HTML+CSS)—— 父亲节节日介绍网页(4个页面)
  • Client ID 与Client Secret
  • React中实现大模型的打字机效果
  • 十二、配置注解执行SQL
  • 阿里云计算之运维概念学习笔记(一)
  • 异常概述
  • 【Postman接口测试】第五节.Postman接口测试项目实战(下)
  • 医用腕带朔源用的条形码与二维码如何选择
  • “Kubectl 如何工作案例:编写自定义 Kubectl 命令
  • opencv-python(五)
  • 免费生物蛋白质的类chatgpt工具助手copilot:小分子、蛋白的折叠、对接等
  • Mybatis01-初识Mybatis
  • 算法课程笔记——基础数据结构 堆
  • 边缘数据采集网关为企业提供高效、安全、可靠的数据采集解决方案-天拓四方
  • 鸿蒙开发接口安全:【@ohos.security.huks (通用密钥库系统)】
  • 黄仁勋:打破摩尔定律,机器人时代来了
  • 每天的CTF小练--6.5(ascll码高级运用)
  • docker参数大P与小p的区别
  • 智慧启航 网联无限丨2024高通汽车技术与合作峰会美格智能分论坛隆重举行
  • 20.Redis之缓存
  • vue中实现一个时间选择器的级联框,第一层小时,第二层分钟
  • 数据分析必备:一步步教你如何用Pandas做数据分析(17)
  • 检查用户是否在错误的目录中运行了CMake命令
  • 前端工程化工具系列(四)—— Commitlint(v19.3.0):规范化 Git 提交
  • <vs2022><问题记录>visual studio 2022使用console打印输出时,输出窗口不显示内容
  • 推荐一个免费的相亲工具
  • 写一个盲盒模拟器