LeetCode 383. 赎金信
题目
给你两个字符串:
ransomNote和magazine,判断ransomNote能不能由magazine里面的字符构成。如果可以,返回
true;否则返回false。
magazine中的每个字符只能在ransomNote中使用一次。示例 1:
输入:ransomNote = "a", magazine = "b" 输出:false示例 2:
输入:ransomNote = "aa", magazine = "ab" 输出:false示例 3:
输入:ransomNote = "aa", magazine = "aab" 输出:true提示:
1 <= ransomNote.length, magazine.length <= 105ransomNote和magazine由小写英文字母组成
题目含义解析
赎金信:歹徒为了要赎金,并且防止字迹被认出,所以从杂志或报纸中,找对应的字母,然后拼成一封信,能不能拼成呢,就要求杂志中的字符比赎金中的多。
这个问题的核心在于判断一个给定的字符串(通常被视为“赎金信”或“目标字符串”)是否完全可以由另一个字符串(通常被视为“杂志”或“源字符串”)中的字符(且每个字符仅使用一次)组成。
实际就是ransomNote中每个字符出现的次数,要小于等于magazine中该字符出现的次数
比如ransomNote=abca ,a出现2次,b,1次,c,1次,magazine=aabcda,a:3次,b:1次,c:1次,d:1次,2<3,1=1,1=1,满足条件可以
思路
该问题可以用哈希表来解决
哈希表是根据关键码的值而直接进行访问的数据结构。例如数组,可以根据下标来获取对应元素
哈希表能解决什么问题呢,一般哈希表都是用来快速判断一个元素是否出现集合里
常见的三种哈希结构:
- 数组
- set (集合)
- map(映射)
该问题可以用一个哈希结构存储ransomNote每个字符出现次数,然后遍历magazine,当字符出现在哈希表中时,次数减一,如果次数已经是1,那么再减一次就是0了,直接移除掉该字符
如果次数大于1,那么次数减一
结果判断map是否为空,为空就说明都包含
代码
public boolean canConstruct(String ransomNote, String magazine) {int a=ransomNote.length();int b=magazine.length();Map<Character,Integer> map = new HashMap<>();//将ransomNote中的字符放入到数组中,键是字符,值是字符次数for(int i=0;i<a;i++){char c= ransomNote.charAt(i);map.put(c,map.getOrDefault(c,0)+1);}//for(int j=0;j<b;j++){char d= magazine.charAt(j);//map中包括当前字符if(map.containsKey(d)){//获取次数,判断次数等于一,再减掉一次就是0,直接移除int time = map.get(d);if(time==1){map.remove(d);}else{//次数>1,map中该字符次数减一map.put(d,time-1);}}}//最后map是空就说明是可以,否则就说明不可以return map.isEmpty();}
方法二:使用数组当做哈希结构
由于题目中说明都是因为小写字符,所以可以建立一个26个初始值为0的数组,
数组下标就是当前字符-'a',后的值,数组的值存出当前字符出现次数
例如’c‘-'a'=2,存储在下标为2的地方,
遍历magazine,存储当前字符出现次数,
遍历ransomNote,当前字符-’a‘ 位置处的值-1,如果减掉之后,已经小于0了,那么就直接返回false
public static boolean canConstruct1(String ransomNote, String magazine) {//存储当前字符出现次数int[] nums=new int[26];//看magazine中每个字符出现次数for(char a:magazine.toCharArray()){nums[a-'a']++;}//遍历ransomNotefor(char b :ransomNote.toCharArray()){//次数先-1nums[b-'a']--;//次数小于0,说明magazine中字符少,直接返回falseif(nums[b-'a']<0){return false;}}return true;}
相关文章:
LeetCode 383. 赎金信
题目 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1: 输入&…...
python绘制电路图
要在 Python 中实现电路图,你可以使用一些专门的库来创建和可视化电路图。一个常用的库是 schemdraw,它可以用来绘制电路图,并支持多种电气组件和符号。 下面是一个使用 schemdraw 库绘制简单电路图的示例: 安装 schemdraw 库&am…...
Vue3 Suspense 和 defineAsyncComponent 结合使用方法
Suspense:用于协调对组件树中嵌套的异步依赖的处理。 defineAsyncComponent:定义一个异步组件,它在运行时是懒加载的。参数可以是一个异步加载函数,或是对加载行为进行更具体定制的一个选项对象。 异步组件的好处:使…...
GitHub中Codespace怎么使用;LLM模拟初始化;MLP:全连接神经网络的并行执行
目录 PyUnit unittest是什么 unittest怎么使用 GitHub中Codespace怎么使用 测试常用功能 LLM模拟初始化 参数解释 类属性设置 总结 MLP:全连接神经网络的并行执行 假设 代码解释 注意事项 PyUnit unittest是什么 unittest是Python的内置单元测试框架,原名PyUn…...
【rh】rh项目部署
【fastadmin】 1、项目先clone到本地,其中web为h5前端使用(gitclone后,把web内容放进去再提交),其余为项目后端使用 2、安装本地环境,项目跑起来,步骤如下: 1)查春.git 和 composer,json 版本信…...
VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection
VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection Abstract 摘要部分,作者首先指出了3D点云中目标检测的重要性,在自动驾驶导航、家政机器人以及增强现实和虚拟现实等多个领域有重要的作用。然后,提到了现有方法的…...
结构开发笔记(三):solidworks软件(二):小试牛刀,绘制一个立方体
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/141122350 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...
LLM 量化算法AutoRound 0.3 发布及原理浅析
这里写自定义目录标题 AutoRound V0.3 特性原理浅析其他工作AutoRound 原理 AutoRound(https://github.com/intel/auto-round)在Llama3.1-8B-Instruct上效果明显优于AWQ/GPTQ等方法,在10个任务的平均准确率上我们以63.93%由于AWQ的63.15%和GP…...
汽车免拆诊断案例 | 2013款北京现代悦动车发动机偶尔无法起动
故障现象 一辆2013款北京现代悦动车,搭载G4FC发动机,累计行驶里程约为13.9万km。车主反映,发动机偶尔无法起动着机,断开点火开关,等待一会儿又可以起动着机。 故障诊断 接车后反复试车,当发动机无法起动着…...
React、AntD,封装动态表单
在React中使用Ant Design(简称AntD)来封装动态表单是一个常见的需求,特别是在需要灵活配置表单字段的场景下。以下是一个基本的步骤和示例代码,展示如何使用React和AntD来封装一个动态表单。 步骤 1: 安装必要的库 首先,确保你的项目中已经安装了react和antd。如果还没有…...
【Linux基础】Linux中的开发工具(3)--make/makefile和git的使用
目录 前言一,Linux项目自动化构建工具-make/makefile1. 背景2. 依赖关系和依赖方法3. 项目清理4. 使用方法和原理5. .PHONY的作用6. makefile中符号的使用 二,进度条的实现1. 理解回车换行2. 理解行缓冲区3. 版本14. 版本2 三,Linux上git的使…...
过滤了字母、数字、_、$的webshell命令执行技巧
目录 对于php5以上首先要解决的问题有 解决技巧 1.code长度小于35位 2.没有字母、数字、_ 、$ 3.怎么把文件放进服务器 4.怎么执行文件里面的内容 1.执行Linux命令 2.执行文件里面的shell命令 5.构造完整的code参数 6.我们还可以通过修改文件里面shell命令,…...
python-A+B again
[题目描述] 小理有一个非常简单的问题给你,给你两个整数 A 和 B,你的任务是计算 AB。输入格式: 输入共 2∗T1 行。 输入的第一行包含一个整数 T 表示测试实例的个数,然后 2∗T 行,分别表示 A 和 B 两个正整数。注意整数…...
C语言—函数递归
一、递归概念 递归其实是⼀种解决问题的⽅法,在C语⾔中,递归就是函数⾃⼰调⽤⾃⼰。下面举一个例子: 上述就是⼀个简单的递归程序,只不过上⾯的递归只是为了演⽰递归的基本形式,不是为了解决问题,代码最终…...
结构开发笔记(四):solidworks软件(三):绘制36x36方块摄像头示意体
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/141187797 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...
【机器学习】Caltech-101的基本概念和使用方法以及Caltech-101和ImageNet的联系和区别
引言 Caltech-101数据集是一个广泛用于对象识别任务的数据库,它包含了大约9,000张图像,这些图像来自101个不同的对象类别。每个类别包含的图像数量大约在40到800张之间,大多数类别大约有50张图像。图像的分辨率大致为300200像素 文章目录 引言…...
mysql Ubuntu安装与远程连接配置
一、安装(Ubuntu22环境安装mysql8) 这里使用Xshell链接Ubuntu和mysql windows进行操作,特别提醒:安装之前建议对Ubuntu快照处理备份,避免安装中出错导致Ubuntu崩溃。 查看是否安装的有可以用指令:ps -ef|…...
c语言中比较特殊的输入格式
目录 一.%[ ] 格式说明符 1.基本用法 (1)读取字母字符: (2)读取数字字符: (3)读取所有字符直到遇到空格: (4)读取直到换行符: 2.使用范围和组合: 3.^ 取反操作 4.注意事项 (1). 字符范围的正确表示 (2). 避免字符集中的特殊字符冲突 (3).避免空字符集 (4). 输入长…...
远程命令行控制SSH
第一次接触SSH是ROS小车作为服务端,通过ubuntu电脑客户端访问。因为机器人接键盘和屏幕操作起来不方便,所以使用SSH进行连接,方便对小车的操作。 1.服务端安装 打开终端查看ssh是否安装 sudo service ssh status 如果未安装 sudo apt upd…...
钢铁百科:A572Gr60和SA572Gr60材质分析、A572Gr60和SA572Gr60简介
A572Gr60和SA572Gr60是两种常用的结构钢板,它们在材质、执行标准、化学成分、力学性能、交货状态、应用范围和常用规格方面有所不同。 材质: A572Gr60:属于美国材料与试验协会(ASTM)标准下的A572系列高性能结构钢&…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...
