【Python3】【力扣题】383. 赎金信
【力扣题】题目描述:

题解:
两个字符串ransomNote和magazine,ransomNote中每个字母都在magazine中一一对应(顺序可以不同)。
即分别统计两个字符串中每个字母出现的次数,ransomNote中每个字母的个数小于等于magazine中该字母对应的个数。
【Python3】代码:
1、解题思路:使用collections.Counter()分别统计两字符串的字母及出现次数,比较相同字母的个数。
(1-1)若某字母在ransomNote中的个数大于在magazine中的个数,则有元素在magazine字符串中不存在。
知识点:len(...):获取序列(字符串、列表等)的长度。
collections.Counter(...):字典子类,计数器,统计元素和元素出现的次数。
字典.items():返回可迭代的字典的所有键值对,键值对是元组形式 (键, 值)。
字典[键]:获取字典中键对应的值。也可给键赋值或修改值:字典[键]=值。
class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:from collections import Counterif len(ransomNote) > len(magazine): return Falsea, b = Counter(ransomNote), Counter(magazine)for k,v in a.items():if a[k] > b[k]:return Falsereturn True
(1-2)两个计数器相减,即相同的键对应的值相减,若相减后仍有元素的值大于0,则有元素在magazine字符串中不存在。
知识点:collections.Counter(可迭代对象1) - collections.Counter(可迭代对象2):两个可迭代对象中相同元素的值相减,只返回结果值大于0的元素。
class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:from collections import Counterif len(ransomNote) > len(magazine): return Falsereturn not Counter(ransomNote) - Counter(magazine)
注解:

2、解题思路:用一个字典记录每个字母的个数。
(2-1)字符串ransomNote中统计每个字母的个数,字符串magazine将字母对应的个数从字典中减去。若最终字典中有字母的值大于0,则有元素在magazine字符串中不存在。
知识点:collections.defaultdict(...):字典子类,若字典中某键不存在,则调用工厂函数返回默认值。
字典.values():返回可迭代的字典的所有值。
class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:from collections import defaultdictif len(ransomNote) > len(magazine): return Falsed = defaultdict(int)for x in ransomNote:d[x] += 1for y in magazine:d[y] -= 1for val in d.values():if val > 0:return Falsereturn True
(2-2)两个字符串反过来统计,字符串magazine中统计每个字母的个数,字符串ransomNote将字母对应的个数从字典中减去,若减去后该字母的值小于0,则有元素在magazine字符串中不存在。
class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:from collections import defaultdictif len(ransomNote) > len(magazine): return Falsed = defaultdict(int)for y in magazine:d[y] += 1for x in ransomNote:d[x] -= 1if d[x] < 0:return Falsereturn True
3、解题思路:用一个列表记录每个字母的个数。以字母距离“a”的间隔作为下标。字符串ransomNote中统计每个字母总个数,字符串magazine将字母对应的个数从列表中减去。若结果中有元素大于0,则有元素在magazine字符串中不存在。
(3-1)知识点:[0]*26:即长度为26的元素都是0的列表,[0,0,...0,0]。
ord(...):获取字符的ascii值或unicode值。
列表[下标]:获取列表中下标对应的元素。也可修改下标对应的元素值:列表[下标]=值。
class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:if len(ransomNote) > len(magazine): return False alist = [0] * 26 for x in ransomNote:alist[ord(x) - ord("a")] += 1for y in magazine:alist[ord(y) - ord("a")] -= 1for val in alist:if val > 0:return Falsereturn True
(3-2)知识点:itertools.chain(可迭代对象1, 可迭代对象2,...):返回一个迭代器,包含多个可迭代对象的所有元素。
enumerate(...):返回可迭代的所有元素下标和元素,元组形式 (下标, 元素)。
class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:from itertools import chainn = len(ransomNote)if n > len(magazine): return Falsealist = [0] * 26 for i,x in enumerate(chain(ransomNote,magazine)):if i < n: alist[ord(x)-ord("a")] += 1else:alist[ord(x)-ord("a")] -= 1for val in alist:if val > 0:return Falsereturn True
(3-3)知识点:itertools.zip_longest(可迭代对象1, 可迭代对象2, fillvalue=None):返回一个迭代器,将两个可迭代对象的元素按对应位置一一组成元组。所有元素遍历完,若其中一个可迭代对象没有元素了,可用fillvalue参数指定默认值来填充空缺,若没有指定fillvalue,则用None填充空缺。
class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:from itertools import zip_longestif len(ransomNote) > len(magazine): return False alist = [0] * 26for x,y in zip_longest(ransomNote,magazine,fillvalue=0):if x != 0: alist[ord(x)-ord("a")] += 1if y != 0: alist[ord(y)-ord("a")] -= 1for val in alist:if val > 0:return Falsereturn True
4、解题思路:将字符串ransomNote中字母去重,再遍历元素,比对字母在两个字符串中出现的次数,若所有字母在ransomNote中的个数都小于magazine中的个数,则返回True。
知识点:set(...):转为集合,集合中的元素不重复。
序列.count(...):统计元素在序列(字符串,列表等)中出现的次数。
all(...):判断可迭代对象(元组,列表)中的所有元素是否都为True。
class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:if len(ransomNote) > len(magazine): return False return all(ransomNote.count(x) <= magazine.count(x) for x in set(ransomNote))
相关文章:
【Python3】【力扣题】383. 赎金信
【力扣题】题目描述: 题解: 两个字符串ransomNote和magazine,ransomNote中每个字母都在magazine中一一对应(顺序可以不同)。 即分别统计两个字符串中每个字母出现的次数,ransomNote中每个字母的个数小于等…...
外包搞了6年,技术退步明显......
先说情况,大专毕业,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…...
uni-app x生成的安卓包,安装时,提示不兼容。解决方案
找到 manifest.json 进入:源码视图 代码 {"name" : "xxx康养","appid" : "__xxx6","description" : "xxx康养","versionName" : "1.0.12","versionCode" : 100012,&…...
Screenshot To Code
序言 对于GPT-4我只是一个门外汉,至于我为什么要了解screenshot to code,只是因为我想知道,在我不懂前端设计的情况下,能不能通过一些工具辅助自己做一些简单的前端界面设计。如果你想通过此文深刻了解GPT-4或者该开源项目&#…...
SpringBoot 是如何启动一个内置的Tomcat
为什么说Spring Boot框架内置Tomcat 容器,Spring Boot框架又是怎么样去启动Tomcat的?我简单总结下学习过程。 一:简单了解SpringBoot的启动类 我们都知道Spring Boot框架的启动类上是需要使用 @SpringBootApplication 注解标注的, @SpringBootApplication 是一个复合注解…...
《功能磁共振多变量模式分析中空间分辨率对解码精度的影响》论文阅读
《The effect of spatial resolution on decoding accuracy in fMRI multivariate pattern analysis》 文章目录 一、简介论文的基本信息摘要 二、论文主要内容语音刺激的解码任务多变量模式分析(MVPA)K空间 空间分辨率和平滑对MVPA的影响平滑的具体过程…...
pygame实现贪吃蛇小游戏
import pygame import random# 游戏初始化 pygame.init()# 游戏窗口设置 win_width, win_height 800, 600 window pygame.display.set_mode((win_width, win_height)) pygame.display.set_caption("Snake Game")# 颜色设置 WHITE (255, 255, 255) BLACK (0, 0, 0…...
反序列化漏洞(二)
目录 pop链前置知识,魔术方法触发规则 pop构造链解释(开始烧脑了) 字符串逃逸基础 字符减少 字符串逃逸基础 字符增加 实例获取flag 字符串增多逃逸 字符串减少逃逸 延续反序列化漏洞(一)的内容 pop链前置知识,魔术方法触…...
【开箱即用】前后端同时开源!周末和AI用Go语言共同研发了一款笔记留言小程序!
大家好,我是豆小匠。 真的是当你在怀疑AI会不会取代人类的时候,别人已经用AI工具加速几倍的生产速度了… 周末体验了和AI共同开发的感受,小项目真的可以一人全干了… 本次实验使用的AI工具有两个:1. GitHub Copilot(…...
java对xml压缩
import java.util.*; import java.util.zip.GZIPOutputStream; import java.nio.charset.StandardCharsets; import org.apache.commons.codec.binary.Base64;/*** 模板压缩** param xml 模板xml* return* throws Exception*/public static String businessData(String xml) th…...
GoLang切片
一、切片基础 1、切片的定义 切片(Slice)是一个拥有相同类型元素的可变长度的序列它是基于数组类型做的一层封装它非常灵活,支持自动扩容切片是一个引用类型,它的内部结构包含地址、长度和容量声明切片类型的基本语法如下&#…...
前端入门(四)Ajax、Promise异步、Axios通信、vue-router路由、组件库
文章目录 AjaxAjax特点 Promise 异步编程(缺)Promise基本使用状态 - PromiseState结果 - PromiseResult AxiosVue中使用AxiosAxios请求方式getpostput和patchdelete并发请求 Vue路由 - vue-router单页面Web应用(single page web application&…...
正则表达式回溯陷阱
一、匹配场景 判断一个句子是不是正规英文句子 text "I am a student" 一个正常的英文句子如上,英文单词 空格隔开 英文单词 多个英文字符 [a-zA-Z] 空格用 \s 表示 那么一个句子就是单词 空格(一个或者多个,最后那个单词…...
MATLAB实战 | S函数的设计与应用
S函数用于开发新的Simulink通用功能模块,是一种对模块库进行扩展的工具。S函数可以采用MATLAB语言、C、C、FORTRAN、Ada等语言编写。在S函数中使用文本方式输入公式、方程,非常适合复杂动态系统的数学描述,并且在仿真过程中可以对仿真进行更精…...
Day41 使用listwidget制作简易图片播放器
1.简介 使用QlistWidget实现简易图片播放器,可以打开一个图片序列,通过item的单击事件实现图片的切换,通过设置list的各种属性实现图片预览的显示,美化滚动条即可实现一个简易图片播放器。 2.效果 3.实现步骤: 1.初始…...
matlab 基于卡尔曼滤波的GPS-INS的数据融合的导航
1、内容简介 略 25-可以交流、咨询、答疑 2、内容说明 基于卡尔曼滤波的GPS-INS的数据融合的导航 "基于卡尔曼滤波的GPS-INS的数据融合的导航 基于卡尔曼滤波实现GPS-INS组合导航系统" 卡尔曼滤波、GPS、INS、数据融合、导航 3、仿真分析 4、参考论文 略 …...
vivado实现分析与收敛技巧6-策略建议
典型时序收敛策略需运行大量实现策略并选取其中最佳的策略以供在实验室内应用。 ML 策略同样可选 , 且只需您运行3 项策略即可达成类似的 QoR 收益。这些策略使用机器学习来检验布线后设计的各项功能特性 , 以便预测相同设计上不同策略的性能。在 repo…...
SOCKET、TCP、HTTP之间的区别与联系
SOCKET、TCP、HTTP之间的区别与联系 一、 Socket 1、什么是socket2、为什么需要socket3、建立socket连接 二、HTTP(基于TCP) 1、HTTP的概念2、HTTP连接的特点 连接请求:一次连接连接请求:短连接(socket是长连接) 三、TCP/IP协议簇 四、HTTP、Socket…...
javascript的Proxy
1. 什么是Proxy Proxy是ES6中新增的一个特性,它可以拦截对象的操作,提供了一个中间层来控制对目标对象的访问。简单来说,它可以对对象进行代理,从而实现对对象的监控、修改、过滤等操作。 2. 为什么出现Proxy 在JavaScript中&a…...
Python发送微信模板消息
1、根据appid,secret获取token 2、查找粉丝 3、指定模板及粉丝id发送模板消息 4、链接SqlServer数据库获取消息任务 5、创建定时任务监听消息 from logging import exception import time import pymysql import datetime; from utils.http_utils import *; from model.msg_wx_…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
大数据治理的常见方式
大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法,以下是几种常见的治理方式: 1. 数据质量管理 核心方法: 数据校验:建立数据校验规则(格式、范围、一致性等)数据清洗&…...
