赎金信(Hash的应用)
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/ransom-note
思路:
本题判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成,但是这里需要注意两点。
-
第一点“为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思” 这里说明杂志里面的字母不可重复使用。
-
第二点 “你可以假设两个字符串均只含有小写字母。” 说明只有小写字母,这一点很重要
因为题目所只有小写字母,那可以采用空间换取时间的哈希策略, 用一个长度为26的数组还记录magazine里字母出现的次数。
然后再用ransomNote去验证这个数组是否包含了ransomNote所需要的所有字母。
依然是数组在哈希法中的应用。
为什么不用map呢?,因为在本题中,使用map的空间消耗比数组要大一些,因为map要维护红黑树或者哈希表,而且还要做哈希函数,是费时的!数据量大的话就能体现出来差别了。所以数组更加简单直接!
代码:
暴力解法:
// 时间复杂度: O(n^2)
// 空间复杂度:O(1)
class Solution {
public:bool canConstruct(string ransomNote, string magazine) {for (int i = 0; i < magazine.length(); i++) {for (int j = 0; j < ransomNote.length(); j++) {// 在ransomNote中找到和magazine相同的字符if (magazine[i] == ransomNote[j]) {ransomNote.erase(ransomNote.begin() + j); // ransomNote删除这个字符break;}}}// 如果ransomNote为空,则说明magazine的字符可以组成ransomNoteif (ransomNote.length() == 0) {return true;}return false;}
};
哈希解法:
// 时间复杂度: O(n)
// 空间复杂度:O(1)
class Solution {
public:bool canConstruct(string ransomNote, string magazine) {int record[26] = {0};//addif (ransomNote.size() > magazine.size()) {return false;}for (int i = 0; i < magazine.length(); i++) {// 通过recode数据记录 magazine里各个字符出现次数record[magazine[i]-'a'] ++;}for (int j = 0; j < ransomNote.length(); j++) {// 遍历ransomNote,在record里对应的字符个数做--操作record[ransomNote[j]-'a']--;// 如果小于零说明ransomNote里出现的字符,magazine没有if(record[ransomNote[j]-'a'] < 0) {return false;}}return true;}
};
相关文章:

赎金信(Hash的应用)
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 来源:力扣࿰…...

4月更新!EasyOps®全平台27项新功能一口气来袭~
又到了每月产品盘点时刻,27大新功能上线和升级优化,设计Hyperlnsight超融合持续观测平台、DevOps持续交付平台、AutoOps自动化运维平台、ITSM服务平台、公共服务,在不断的技术创新过程中,进一步加速IT运维效率升级。 下面和小编一…...

程序计算任意连续的12个月公里数不超三万公里预警
为了比亚迪的电池终身质保,写了个简单算法,计算任意12个连续的月份公里数加起来不超过3万公里的预警import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; import java.util.stream.Collectors;/***…...
【IMU】IMU知多少之42866
ICM-42688-P数据手册中加速度计和角速度计的超量程阈值分别如下: 加速度计超量程阈值: 数字量(LSB):16g 模拟量(g):22g 角速度计超量程阈值: 数字量(LSB&a…...

谁说不能用中文写代码?
入门教程、案例源码、学习资料、读者群 请访问: python666.cn 大家好,欢迎来到 Crossin的编程教室 ! 现代计算机和编程的起源和推动力量主要源自美国,再加上26个字母很便于表示(算上大小写,6位bit就够了&am…...

Java阶段二Day07
Java阶段二Day07 文章目录 Java阶段二Day07V17UserControllerDispatcherServletControllerRequestMapping V18DispatcherServletHandleMapping V19BirdBootApplication 线程池线程的执行过程线程池API 数据库数据库的基本概念数据库管理系统中常见的概念 SQL分类DDL语言-数据定…...

React Native iOS打包详细步骤
一、在自己项目的iOS文件夹下新建一个文件夹取名bundle 二、将打包命令写到项目package.json文件里,终端执行 npm run bundle-ios 先添加如下(注意:这里写的路径"./ios/bundle"就是上面bundle创建的文件夹):…...
I/O复用函数,poll和epoll的用法与select、poll、epoll的区别
1.poll的接口介绍 poll系统调用和select类似,也是在指定时间内轮询一定数量的文件描述符,已测试其中是否有就绪者。poll的原型如下: # include <poll.h> int poll(struct pollfd*fds,nfds_t nfds,int timeout); poll系统调用成功返回就…...

大数据周会-本周学习内容总结011
开会时间:2023.04.23 15:00 线下会议 目录 01【spark】 02【es同步mysql】 03【下周任务】 01【spark】 尚硅谷大数据技术Spark教程-笔记01【Spark(概述、快速上手、运行环境、运行架构)】尚硅谷大数据技术Spark教程-笔记02【SparkCore&am…...
常见的NoSQL数据库介绍
目录 一、NoSQL概述 二、为什么用NoSQL 三、NoSQL特点 四、NoSQL的分类 五、NoSQL适用场景 六、NoSQL不适用场景 一、NoSQL概述 NoSQL(NoSQL Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库。 NoSQL 不依赖业务逻辑方式存储…...

记录安装Nodejs和HBuilderX搭建、部署微信小程序开发环境(一)
文章目录 1 前言2 注册小程序账号3 安装微信开发者工具4 安装Nodejs和HBuilderX4.1 windows用户安装Nodejs4.2 macos/linux用户安装Nodejs4.3 安装HBuilder X 5 创建项目5.1 新建一个项目5.2 进行基本配置 6 HBuilderX同步微信开发者工具6.1 打开服务端口6.2 调用微信开发者工具…...
(一)pyahocorasick和marisa_trie,字符串快速查找的python包,自然语言处理,命名实体识别可用的高效包...
Pyahocorasick Pyahocorasick是一个基于AC自动机算法的字符串匹配工具。它可以用于快速查找多个短字符串在一个长字符串中的所有出现位置。Pyahocorasick可以在构建状态机时使用多线程,从而大大加快构建速度。 安装Pyahocorasick Pyahocorasick可以使用pip命令进行安…...

基于Java+SpringBoot+vue+element驾校管理系统设计和实现
基于JavaSpringBootvueelement驾校管理系统设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 …...
Unity中值类型和引用类型及使用时的注意事项
什么是值类型,什么是引用类型,Unity中值类型有哪些,引用类型有哪些,使用时需要注意些什么? 一、值类型和引用类型的概念 A. 值类型 值类型是指变量直接存储其值的数据类型,变量的值被保存在栈中࿰…...

PM510V16 3BSE008358R1嵌入式卡件用于励磁系统多用于工业发电
PM510V16 3BSE008358R1嵌入式卡件用于励磁系统多用于工业发电 物联网与工业自动化控制系统的联系 当今,物联网可谓是在各大媒体出镜率最高、而且与“智能”联系密切的名词之一。从“管理、控制、智能”的角度来看,其实物联网与工业自动化是一脉相承的…...

AI 这是要杀疯啦!
ChatGPT 是基于 GPT 系列大模型开发出来的一个对话场景的 Demo,它已经让我们见识到了大模型的威力。 但有些开发者的胃口不满足于此,已经开始尝试“突破” AI 的边界了,本文推荐 5 个人工智能的开源项目。其中前两个项目,让人细思…...
【精品示例】超实用Python爬虫入门实例——做一个优质舔狗
引言 最近发现了一个有意思的网站,里面充斥了大量的舔狗箴言。作为一个爬虫发烧友怎么能错过此等机会,咱们直接就是上才艺! 类的编写 本次爬虫使用了多协程的方案进行,保证了爬虫的速度。在这里我们新建一个爬虫类,…...

TCP流量控制与拥塞控制
什么是流量控制 一条TCP连接的每一侧主机都为该连接设置了接收缓存。当该TCP连接接收到正确的、有序的报文段,就会将数据放入接收缓存。相关联的应用会从缓存中读取数据。 如果发送者发送数据过快、过多,而接收方的应用程序从缓冲区读取的速度较慢&…...

Java_异常
Java_异常 1.什么是异常 生活中的异常:感冒发烧、电脑蓝屏、手机死机等。 程序中的异常:磁盘空间不足、网络连接中断、被加载的资源不存在等。 程序异常解决办法:针对程序中非正常情况,Java语言引入了异常࿰…...

自动化工具 接口自动化测试引擎
一、前言: 1、解决痛点:接口自动化测试用例需要人去开发、去维护。 2、实现第一性原理:根据定义的测试策略自动生成接口测试用例。 二、引擎优势: 1、提升人效:降低传统方式中接口测试开发与维护的工作量。 2、覆盖更…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...