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

力扣刷题-哈希表-一个字符串是否能够由另一个字符串中的字符组成

383 赎金信

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。ransomNote 和 magazine 由小写英文字母组成
示例 1:
输入:ransomNote = “a”, magazine = “b”
输出:false
示例 2:
输入:ransomNote = “aa”, magazine = “ab”
输出:false
示例 3:
输入:ransomNote = “aa”, magazine = “aab”
输出:true

思路

这道题目和242.有效的字母异位词很像,242.有效的字母异位词 (opens new window)相当于求 字符串a 和 字符串b 是否可以相互组成 ,而这道题目是求 字符串a能否组成字符串b,而不用管字符串b 能不能组成字符串a。
两个需要注意的点:

  • 第一点“为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思” 这里说明杂志里面的字母不可重复使用。
  • 第二点 “你可以假设两个字符串均只含有小写字母。” 说明只有小写字母,这一点很重要(说明可以用数组,然后采用空间换时间的策略,用一个长度为26的数组来记录

数组

class Solution(object):def canConstruct(self, ransomNote, magazine):""":type ransomNote: str:type magazine: str:rtype: bool"""# 用两个数组来记录两个字符串中字符的出现个数 因为只有小写字母r_list = [0]*26 m_list = [0]*26for i in ransomNote:r_list[ord(i)-ord('a')] += 1 # 每个字符出现次数for i in magazine:m_list[ord(i)-ord('a')] += 1 # 每个字符出现次数return all(r_list[i] <= m_list[i] for i in range(26)) # 判断是否能组成 all这个很巧妙

使用deafaultdict

class Solution(object):def canConstruct(self, ransomNote, magazine):""":type ransomNote: str:type magazine: str:rtype: bool"""# 判断两个字符串中字符的出现次数hasgmap = defaultdict(int) # 定义一个字典计数器for i in magazine: # 因为是判断ransomNote是否能够由magazine中的字符组成hasgmap[i] += 1for i in ransomNote:value = hasgmap.get(i)if not value: # 注意这与 value==0 不一样 not value表示不存在这个键 获取不到值 就是Nonereturn False # 遍历完之前就已经没有这个键了else:hasgmap[i] -= 1return True

参考:https://www.programmercarl.com/

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

相关文章:

  • Android使用AOP切面编程
  • Flutter学习笔记
  • 软件生命周期中的概念设计和详细设计的主要任务是什么
  • 大数据学习(2)Hadoop-分布式资源计算hive(1)
  • 深入探究HTML表单与JavaScript的关系
  • 关于Jupyter notebook 创建python3 时进去不能重命名问题及不能编程问题
  • 一些可以用代码绘制流程图的工具
  • Centos中清除因程序异常终止,导致的残留的Cache/buff_drop_caches命令---linux工作笔记063
  • Element-UI的使用——表格el-table组件去除边框、滚动条设置、隔行变色、去除鼠标悬停变色效果(基于less)
  • python的一些知识点
  • QML 带框最大化显示方法
  • conda命令大全
  • 国庆要闻回顾 | OpenAI 拟研发 AI 手机;9月以太坊上NFT销售量创2021年2月以来最低记录...
  • 国家开放大学 模拟试题 训练
  • 【GIT版本控制】--常见问题与解决方案
  • Redis安装及key、string操作
  • TCP和UDP的由浅到深的详细讲解
  • 端粒/端粒酶生信切入点,6+端粒酶+泛癌+甲基化+实验。
  • XMLHttpRequest和Fetch API
  • U-boot下netconsole实现
  • Unity设计模式——原型模式
  • leetcode 96 不同的二叉搜索树
  • http发送和接收图片json文件
  • MM-Camera架构-ProcessCaptureRequest 流程分析
  • 196、管理 RabbitMQ 的用户
  • 【已解决】Python读取sql数据,报错:Not an executable object,解决方案
  • STM32 CubeMX ADC采集(HAL库)
  • [UUCTF 2022 新生赛]ezpop - 反序列化+字符串逃逸【***】
  • Selenium进行无界面爬虫开发
  • 万宾荣获深圳应博会“全球应急产业先锋奖”创始人发表峰会演讲