leetcode-383.赎金信

题源

383.赎金信

题目描述

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

思考

思考一 – 哈希表 – 数组

如果magazine 中的每个字符只能在 ransomNote 中使用一次

那么magazine的长度必然>=ransomNote

开辟一个vector容器,先给magazine包含的字母计数+,再给ransomNote中的字母计数-,只要vector最

终没有负数元素,则返回true

剪枝

如果magazine的长度<ransomNote的长度,那么必然不能构成ransomNote,这就可以进行剪枝

实现思考一代码

class Solution {
public:bool canConstruct(string ransomNote, string magazine) {//如果magazine 中的每个字符只能在 ransomNote 中使用一次,那么magazine的长度必然>=ransomNote//哈希表 -- 数组//开辟一个vector容器,先给magazine包含的字母计数+,再给ransomNote中的字母计数-,只要vector最终没有负数元素,则返回trueint mlength = magazine.length();int rlength = ransomNote.length();if(mlength < rlength)   return false;vector<int> count(26,0);//给magazine包含的字母计数+for (char c : magazine){count[c-'a']++;}//再给ransomNote中的字母计数-for (char c : ransomNote){count[c-'a']--;}//判断有没有负数元素for (int i : count){//有负数元素if(i < 0)   return false;}//没有负数元素return true;}
};

在这里插入图片描述
最后剪枝的用时和不剪的用时一样

说明在这个题的样例中这种magazine的长度<ransomNote的长度的情况很少。

时间复杂度分析

三个循环的时间复杂度都是O(n)
综合来看,该算法的时间复杂度仍然是O(n)

思考一代码二

class Solution {
public:bool canConstruct(string ransomNote, string magazine) {int recode[26] = {0};//这里可以不剪// if(ransomNote.size() > magazine.size()){//     return false;// }for(int i = 0; i < magazine.length(); i++){recode[magazine[i] - 'a']++;}for(int i = 0; i < ransomNote.length(); i++){recode[ransomNote[i] - 'a']--;if(recode[ransomNote[i] - 'a'] < 0){return false;}}return true;}
};

反而更快
在这里插入图片描述

时间复杂度分析

两个循环的时间复杂度都是O(n)

综合来看,该算法的时间复杂度仍然是O(n)

思考二 – 暴力

用两层循环,外层循环表示magazine,内层循环表示ransomNote

在ransomNote中找到与magazine相同的字母,如有相同,将该

ransomNote的元素删除,然后遍历下一个magazine

最后判断ransomNote是否为空

实现思考二代码

class Solution {
public:bool canConstruct(string ransomNote, string magazine) {for (int i = 0; i < magazine.size();i++){for (int j = 0; j < ransomNote.size();j++){if (magazine[i] == ransomNote[j]){ransomNote.erase(ransomNote.begin()+j);//不能重复使用同一个magazine[i]break;}}}if (ransomNote.empty()) return true;return false;}
};

时间复杂度分析

两层for()循环的时间复杂度都是O(n^2)

erase 函数的时间复杂度通常是 O(n)

综合来看,该算法的时间复杂度仍然是O(n^3)
在这里插入图片描述

注:诸位站友如有所收获不如点个免费的赞,如有错误之处或有其它补充的点,请在评论区发表你的观点,看到必回。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3245430.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Beelzebub过程记录及工具集

文章目录 靶场搭建靶场测试过程安装dirsearch扫描目录wpscan扫描破解 靶场搭建 https://download.vulnhub.com/beelzebub/Beelzebub.zip 下载解压镜像&#xff0c;从vmware打开。 一键式开机即可。 打开后配置网络。 确保网络可达。 靶场测试过程 首先使用nmap扫描网段的存…

SpringBoot项目如何使用自定义Repository

在公司实习的时候&#xff0c;遇到这样一个问题&#xff0c;就是当往数据库添加记录的时候&#xff0c;需要先去查看数据库中的记录数是否超过了最大限制&#xff0c;如果没有超过则进行添加&#xff1b;否则就需要删除先前的记录从而保证数据库中的记录数。这样的话&#xff0…

【EXCELL技巧篇】使用Excel公式,获取当前 Excel的Sheet页的名字

【通知】&#xff1a; 正式跟大家说个难过的消息&#xff0c;本来在「中国朝代史」结束后&#xff0c;开启的下一个专栏「中国近代史」前面几期做的还好好的&#xff0c;可是今天起正式通知审核不过&#xff0c;因为一些原因。 其实我对于历史这一块我还是很感兴趣的&#xff0…

极地生产力自主采样系统的观测:融池比例统计 MEDEA 融池比例数据集

Observations from the Autonomous Polar Productivity Sampling System. 极地生产力自主采样系统的观测结果 简介 该项目是美国国家航空航天局 ICESCAPE 大型项目的一部分&#xff0c;旨在研究浮游植物丰度的长期季节性变化与整个生长季节在波弗特海和楚科奇海测量到的海冰…

从 Pandas 到 Polars 十八:数据科学 2025,对未来几年内数据科学领域发展的预测或展望

我在2021年底开始使用Polars和DuckDB。我立刻意识到这些库很快就会成为数据科学生态系统的核心。自那时起&#xff0c;这些库的受欢迎程度呈指数级增长。 在这篇文章中&#xff0c;我做出了一些关于未来几年数据科学领域的发展方向和原因的预测。 这篇文章旨在检验我的预测能力…

计算机技术与软件专业技术资格(软考)纸质证书邮寄方法

电子版证书已经有网友指出说明方法了&#xff0c;参考 软考电子证书下载 注意如果下载的PDF文件值无法打开的话&#xff0c;可以选择查看&#xff0c;然后 ctrlp 打印为PDF, 也是另外的一种下载方法&#xff1b; 下面说一下纸质版证书邮寄方法 1&#xff1a;登录网站 中国计…

【保姆级】Python项目部署到Linux生产环境(uwsgi+python+flask+nginx服务器)

1.安装python 我这里是3.9.5版本 安装依赖&#xff1a; yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make -y 根据自己的需要下载对应的python版本&#xff1a; cd /usr/local wget https://www.python.or…

CyberVadis认证是什么

CyberVadis认证是一项全球性的、权威的、基于云的网络安全性评估和认证项目。它是由Altimeter公司开发的&#xff0c;专门针对云计算服务提供商、数据中心、软件即服务(SaaS)供应商、安全咨询服务公司和内部IT部门而设计的。 CyberVadis认证旨在评估和验证组织在网络安全方面的…

数电基础 - 硬件描述语言

目录 一. 简介 二. Verilog简介和基本程序结构 三. 应用场景 四. Verilog的学习方法 五.调式方法 一. 简介 硬件描述语言&#xff08;Hardware Description Language&#xff0c;HDL&#xff09;是用于描述数字电路和系统的形式化语言。 常见的硬件描述语言包括 VHDL&…

邮箱表单系统源码

邮箱表单简介 我们的邮箱表单系统是一个简洁高效的工具&#xff0c;旨在为用户提供一种便捷的方式来提交他们的邮箱地址。该系统可以用于订阅新闻通讯、注册活动、获取用户反馈等多种场景。 功能特点&#xff1a; 用户友好的界面&#xff1a; 表单设计简洁直观&#xff0c;用…

成功适配!极验设备指纹HarmonyOS 鸿蒙版官方下载

近日&#xff0c;华为开发者大会&#xff08;HDC 2024&#xff09;在东莞召开。在大会开幕日的首场主题演讲中&#xff0c;华为宣布当前已有TOP5000应用成为鸿蒙原生应用&#xff0c;350&#xff0b;SDK已适配HarmonyOS NEXT版本。其中&#xff0c;极验作为其重要伙伴&#xff…

AI自动生成PPT哪个软件好?高效制作PPT优选这4个

7.15初伏的到来&#xff0c;也宣告三伏天的酷热正式拉开序幕~在这个传统的节气里&#xff0c;人们以各种方式避暑纳凉&#xff0c;享受夏日的悠闲时光。 而除了传统的避暑活动&#xff0c;我们还可以用一种新颖的方式记录和分享这份夏日的清凉——那就是通过PPT的方式将这一传…

02 Git环境搭建

第2章&#xff1a;Git环境搭建 一、Git下载和安装 ​ 官网&#xff1a;Git (git-scm.com) 一&#xff09;安装主程序 ​ 准备安装包&#xff0c;双击安装 ​ 开始安装 ​ 选择安装位置 ​ 选择需要安装的组件&#xff08;默认&#xff09; ​ 选择文件夹菜单 ​ 选择编辑器&…

自适应巡航控制中的Stop Go功能详解

自适应巡航控制中的跟车行驶功能详解 文章目录 1. 背景介绍2. 功能定义3. 功能原理4. 传感器架构5. 实际应用案例6. 总结与展望 1. 背景介绍 自适应巡航控制&#xff08;Adaptive Cruise Control, ACC&#xff09;系统中的Stop & Go功能是提升驾驶舒适性和安全性的重要子…

Visual Studio2022中使用.Net 8 在 Windows 下使用 Worker Service 创建守护进程

Visual Studio2022中使用.Net 8 在 Windows 下创建 Worker Service 1 什么是 .NET Core Worker Service1.1 确认Visual Studio中安装了 ASP.NET和Web开发2 创建 WorkerService项目2.1 新建一个WorkerService项目2.2 项目结构说明3 将应用转换成 Windows 服务3.1 安装Microsoft.…

Spring与设计模式实战之策略模式

Spring与设计模式实战之策略模式 引言 在现代软件开发中&#xff0c;设计模式是解决常见设计问题的有效工具。它们提供了经过验证的解决方案&#xff0c;帮助开发人员构建灵活、可扩展和可维护的系统。本文将探讨策略模式在Spring框架中的应用&#xff0c;并通过实际例子展示…

【HarmonyOS】关于鸿蒙消息推送的心得体会 (一)

【HarmonyOS】关于鸿蒙消息推送的心得体会&#xff08;一&#xff09; 前言 这几天调研了鸿蒙消息推送的实现方式&#xff0c;形成了开发设计方案&#xff0c;颇有体会&#xff0c;与各位分享。 虽然没做之前觉得很简单的小功能&#xff0c;貌似只需要和华为服务器通信&…

MyPostMan 迭代文档管理、自动化接口闭环测试工具(自动化测试篇)

MyPostMan 是一款类似 PostMan 的接口请求软件&#xff0c;按照 项目&#xff08;微服务&#xff09;、目录来管理我们的接口&#xff0c;基于迭代来管理我们的接口文档&#xff0c;文档可以导出和通过 url 实时分享&#xff0c;按照迭代编写自动化测试用例&#xff0c;在不同环…

TypeScript 函数类型 (二)

函数类型 函数有两种方式定义 function 关键字来定义函数 function a(){}表达式定义&#xff08;箭头函数的形式&#xff09; const a()>{}函数需要定义类型的有三个地方 入参 和 返回值 以及 函数本身 的类型, 函数本身的类型常用于表达式定义的函数 function sum(a:stri…

【低照度图像增强系列(8)】URetinex-Net算法详解与代码实现(2022|CVPR)

前言 ☀️ 在低照度场景下进行目标检测任务&#xff0c;常存在图像RGB特征信息少、提取特征困难、目标识别和定位精度低等问题&#xff0c;给检测带来一定的难度。 &#x1f33b;使用图像增强模块对原始图像进行画质提升&#xff0c;恢复各类图像信息&#xff0c;再使用目标检…