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

算法每日一题:赎金信 | 字符和整数

hello,大家好,我是星恒
今天给大家带来的题目是一道简单题目,主要帮大家复习一下字符串和字符的相关操作

给你两个字符串: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 <= 105
  • ransomNote 和 magazine 由小写英文字母组成

分析:
这道题思路很简单,刚开始大家一看到是否组成,一定先想到的是哈希,但是题目紧跟着说"每个字符只能使用一次",誒嘿,那我们肯定不适合用hash了,hash最大的优势在于看元素存在不,计数不是他的优势,这里数组是一种更优的解法

我们只要把26个字母使用数字 0 - 25表示出来,然后使用数组给字符串出现的字母计数,这样我们遍历第一个字符串magazine,存入字符串中字符出现次数,然后遍历ransomNote,减掉对应字符出现的次数,如果次数出现负数,那么说明magazine的字符不能全部包含ransomNote里面的字符!

然后这里如果是算法新手,可能会在字符间相加减有一定的疑惑:加减后是否是ACSII整数,还是还是字符?
这里其实会转为整数,字符和字符相加减,字符和整数相加减都会变为整数
整数转字符只要强转即可(按照ACSII码规则转的),即char a =(char)('a'+x)

题解:

class Solution {public boolean canConstruct(String ransomNote, String magazine) {int[] count = new int[26];for (int i = 0; i < magazine.length(); i++) {count[magazine.charAt(i) - 'a']++;}for (int i = 0; i < ransomNote.length(); i++) {int index = ransomNote.charAt(i) - 'a';count[index]--;if (count[index] < 0) return false;}return true;}
}

如果大家有什么思考和问题,可以在评论区讨论,也可以私信我,很乐意为大家效劳。
好啦,今天的每日一题到这里就结束了,如果大家觉得有用,可以可以给我一个小小的赞呢,我们下期再见!

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

相关文章:

  • 数字孪生在虚拟现实(VR)中的应用
  • iOS实时查看App运行日志
  • 论文阅读:通过时空生成卷积网络合成动态模式(重点论文)
  • html2canvas+jsPDF导出超长网页的PDF
  • 云计算:OpenStack 分布式架构管理VXLAN网络(单控制节点与多计算节点)
  • MATLAB --- dlmread( )函数的用法
  • STM32CubeMX RS485接口使用
  • ClickHouse(20)ClickHouse集成PostgreSQL表引擎详细解析
  • R304S 指纹识别模块功能实现示例
  • 2、Excel:基础概念、表格结构与常见函数
  • 鱼类识别Python+深度学习人工智能+TensorFlow+卷积神经网络算法
  • ThreadLocal线程重用导致用户信息错乱的 Bug
  • 洛谷——P1143 进制转换
  • linux stop_machine 停机机制应用及一次触发 soft lockup 分析
  • ARM 链接器优化功能介绍
  • 动手学深度学习之卷积神经网络之池化层
  • HackTheBox - Medium - Linux - Ambassador
  • 嵌入式——循环队列
  • 2024.1.7-实战-docker方式给自己网站部署prometheus监控ecs资源使用情况-2024.1.7(测试成功)
  • 20240107 SQL基础50题打卡
  • 阿里云公网带宽出网和入网是什么?上行和下行是什么?
  • eureka工作原理是什么
  • Vue中的事件委托(事件代理)使用方法介绍
  • 「HDLBits题解」Wire decl
  • [MAUI]在.NET MAUI中调用拨号界面
  • Kali/Debian Linux 安装Docker Engine
  • Spring 应用合并之路(二):峰回路转,柳暗花明 | 京东云技术团队
  • SQL Error 1366, SQLState HY000
  • Codeforces Round 893 (Div. 2)(VP-7,寒假加训)
  • MySQL第四战:视图以及常见面试题(上)