【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_…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
云原生安全实战:API网关Envoy的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...
