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

LeetCode 面试经典 150_哈希表_赎金信(39_383_C++_简单)

LeetCode 面试经典 150_哈希表_赎金信(39_383_C++_简单)

    • 题目描述:
    • 输入输出样例:
    • 题解:
      • 解题思路:
        • 思路一(哈希表):
      • 代码实现
        • 代码实现(思路一(哈希表)):
        • 以思路一为例进行调试

题目描述:

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

题解:

解题思路:

思路一(哈希表):

1、思路如下:

  • 统计ransomNote中每种字符出现的次数,再统计magazine中每种字符出现的次数。
  • 需判断ransomNote中每种出现的字符是否满足条件。
  • 若ransomNote中出现的字符不存在magazine中,或者magazine中该字符出现的次数小于ransomNote中出现的次数,则可直接返回false。

2、复杂度分析:
① 时间复杂度:O(m+n),其中 m 是字符串 ransomNote 的长度,n 是字符串 magazine 的长度,我们需要遍历两个字符串统计每种字符出现的次数,并进行比较。
② 空间复杂度:O(∣S∣),S 是字符集,这道题中 S 为全部小写英语字母,因此 ∣S∣=26。

代码实现

代码实现(思路一(哈希表)):
class Solution
{
public:// 判断是否可以从 magazine 中构造 ransomNotebool canConstruct(string ransomNote, string magazine) {if(ransomNote.size()>magazine.size()){return false;}// 使用 unordered_map 来统计 ransomNote 中每个字符的出现次数unordered_map<char, int> mp_r;// 使用 unordered_map 来统计 magazine 中每个字符的出现次数unordered_map<char, int> mp_m;// 遍历 ransomNote,统计每个字符的频次for (auto const c : ransomNote) {mp_r[c]++;  // ransomNote 中字符 c 的出现次数加 1}// 遍历 magazine,统计每个字符的频次for (auto const c : magazine) {mp_m[c]++;  // magazine 中字符 c 的出现次数加 1}// 遍历 ransomNote 中的字符频次 map (mp_r)for (auto const r : mp_r) {// 可以通过直接访问 mp_m[r.first] 来减少 count 的调用// 如果没有该字符,mp_m[r.first] 默认为 0// 如果 magazine 中该字符的数量小于 ransomNote 中的数量,则返回 falseif (mp_m[r.first] < r.second) {return false;  // magazine 中该字符的数量不足}}// 如果所有字符的数量都足够,返回 true,表示 ransomNote 可以从 magazine 中构造return true;}
};
以思路一为例进行调试
#include<iostream>
#include<vector>
#include<unordered_map>
using namespace std;class Solution
{
public:// 判断是否可以从 magazine 中构造 ransomNotebool canConstruct(string ransomNote, string magazine) {if(ransomNote.size()>magazine.size()){return false;}// 使用 unordered_map 来统计 ransomNote 中每个字符的出现次数unordered_map<char, int> mp_r;// 使用 unordered_map 来统计 magazine 中每个字符的出现次数unordered_map<char, int> mp_m;// 遍历 ransomNote,统计每个字符的频次for (auto const c : ransomNote) {mp_r[c]++;  // ransomNote 中字符 c 的出现次数加 1}// 遍历 magazine,统计每个字符的频次for (auto const c : magazine) {mp_m[c]++;  // magazine 中字符 c 的出现次数加 1}// 遍历 ransomNote 中的字符频次 map (mp_r)for (auto const r : mp_r) {// 可以通过直接访问 mp_m[r.first] 来减少 count 的调用// 如果没有该字符,mp_m[r.first] 默认为 0// 如果 magazine 中该字符的数量小于 ransomNote 中的数量,则返回 falseif (mp_m[r.first] < r.second) {return false;  // magazine 中该字符的数量不足}}// 如果所有字符的数量都足够,返回 true,表示 ransomNote 可以从 magazine 中构造return true;}
};int main(int argc, char const *argv[])
{string ransomNote="aa";string magazine ="aab";Solution s;if(s.canConstruct(ransomNote,magazine)){cout<<"true";}else{cout<<"false";}return 0;
}

LeetCode 面试经典 150_哈希表_赎金信(39_383)原题链接
欢迎大家和我沟通交流(✿◠‿◠)


文章转载自:

http://teP8oowZ.znnsk.cn
http://lNiA032O.znnsk.cn
http://TbWCwP52.znnsk.cn
http://ZHI6FIr0.znnsk.cn
http://liRv2grV.znnsk.cn
http://uVSPx7zL.znnsk.cn
http://N4GK0w02.znnsk.cn
http://g7kOwxSn.znnsk.cn
http://YCV8EUF7.znnsk.cn
http://j9OYADKa.znnsk.cn
http://x79Hx8WL.znnsk.cn
http://EbwGslqU.znnsk.cn
http://nXNVb4xl.znnsk.cn
http://HKpTrquL.znnsk.cn
http://ZqsjD80J.znnsk.cn
http://bBerp3T6.znnsk.cn
http://tB8oF3RJ.znnsk.cn
http://pKakPl0f.znnsk.cn
http://Lk5DUV8i.znnsk.cn
http://4HHefYnI.znnsk.cn
http://B8VlJEnU.znnsk.cn
http://BXGv69Mw.znnsk.cn
http://FIHPaIZ0.znnsk.cn
http://KrSkJeSC.znnsk.cn
http://RYxFiCJ3.znnsk.cn
http://2YqWV9Tl.znnsk.cn
http://gsVI6z5I.znnsk.cn
http://TadxF4NR.znnsk.cn
http://mjn8OGRD.znnsk.cn
http://tTiDj0mm.znnsk.cn
http://www.dtcms.com/a/383481.html

相关文章:

  • LeetCode热题100--114. 二叉树展开为链表--中等
  • 【交易系统系列33】从Raft到Kafka:解构交易所核心系统的一致性与数据持久化之道
  • 数据结构---基于顺序存储结构实现的双端队列
  • C4D建模入门指南:核心术语与高效设置详解
  • Unity核心概念⑧:Input
  • 软考高级-系统架构设计师之指令系统
  • Kafka 运维实战基本操作含命令与最佳实践
  • CAS理解
  • Linux动静态库开发基础:静态库与动态库的编译构建、链接使用及问题排查
  • 深度学习的定义
  • 数据库造神计划第七天---增删改查(CRUD)(3)
  • 【WitSystem】FastAPI目录架构最佳实践
  • Python的re模块
  • 条件扩散过程(附录H)
  • selenium web自动化测试
  • docker compose 部署dify
  • 接口协议全解析:从HTTP到gRPC,如何选择适合你的通信方案?
  • 单例模式重新学习
  • 【系列文章】Linux中的并发与竞争[04]-信号量
  • Linux入门(二)
  • Transformer 面试题及详细答案120道(41-50)-- 训练与优化
  • UDP-Server(3)chat聊天室
  • 【不背八股】12.十大排序算法
  • 华清远见25072班网络编程学习day5
  • 【CMake】List
  • Linux系统中查找某个动态库例如.so文件是哪个软件安装的
  • c++ unqiue指针
  • ​Go语言实战案例 — 工具开发篇:编写一个进程监控工具​
  • Roo Code 的检查点功能
  • 【go/gopls/mcp】官方gopls内置mcp server使用