力扣经典150题第三十九题:赎金信

devtools/2024/10/18 8:30:29/

目录

  • 力扣经典150题第三十九题:赎金信
    • 引言
    • 题目详解
    • 解题思路
    • 代码实现
    • 示例演示
    • 复杂度分析
    • 总结

力扣经典150题第三十九题:赎金信

引言

本篇博客介绍了力扣经典150题中的第三十九题:赎金信。题目要求判断字符串 ransomNote 是否能由字符串 magazine 中的字符构成,且 magazine 中的每个字符只能使用一次。

题目详解

给定两个字符串 ransomNotemagazine,要求判断 ransomNote 是否能由 magazine 中的字符构成。具体要求如下:

  • magazine 中的每个字符只能在 ransomNote 中使用一次。
  • 如果能够构成,则返回 true;否则返回 false
    示例 1:

输入:ransomNote = “a”, magazine = “b”
输出:false
示例 2:

输入:ransomNote = “aa”, magazine = “ab”
输出:false
示例 3:

输入:ransomNote = “aa”, magazine = “aab”
输出:true

解题思路

为了判断 ransomNote 是否能由 magazine 中的字符构成,可以利用哈希表记录 magazine 中每个字符的出现次数,然后逐个检查 ransomNote 中的字符是否可以在哈希表中找到并且次数不超过 magazine 中的剩余次数。

具体步骤如下:

  1. 使用哈希表 magazineCount 统计 magazine 中每个字符出现的次数。
  2. 遍历 ransomNote 中的每个字符,查看是否在 magazineCount 中,并且对应字符的剩余次数大于 0
  3. 如果所有字符都满足条件,则返回 true;否则返回 false

通过上述步骤,可以判断 ransomNote 是否能由 magazine 中的字符构成。

代码实现

import java.util.HashMap;
import java.util.Map;public class RansomNote {public boolean canConstruct(String ransomNote, String magazine) {if (ransomNote.length() > magazine.length()) {return false;}// 哈希表记录 magazine 中每个字符的出现次数Map<Character, Integer> magazineCount = new HashMap<>();for (char ch : magazine.toCharArray()) {magazineCount.put(ch, magazineCount.getOrDefault(ch, 0) + 1);}// 检查 ransomNote 中的字符是否能够由 magazine 构成for (char ch : ransomNote.toCharArray()) {if (!magazineCount.containsKey(ch) || magazineCount.get(ch) <= 0) {return false;}magazineCount.put(ch, magazineCount.get(ch) - 1);}return true;}public static void main(String[] args) {RansomNote solution = new RansomNote();// 示例测试String ransomNote1 = "a";String magazine1 = "b";System.out.println("ransomNote: " + ransomNote1 + ", magazine: " + magazine1);System.out.println("结果: " + solution.canConstruct(ransomNote1, magazine1));String ransomNote2 = "aa";String magazine2 = "ab";System.out.println("ransomNote: " + ransomNote2 + ", magazine: " + magazine2);System.out.println("结果: " + solution.canConstruct(ransomNote2, magazine2));String ransomNote3 = "aa";String magazine3 = "aab";System.out.println("ransomNote: " + ransomNote3 + ", magazine: " + magazine3);System.out.println("结果: " + solution.canConstruct(ransomNote3, magazine3));}
}

示例演示

展示了三个不同的示例测试,验证了 ransomNote 是否能由 magazine 中的字符构成的功能。

复杂度分析

该解法的时间复杂度为 O(m + n),其中 m 是 ransomNote 的长度,n 是 magazine 的长度。空间复杂度为 O(n),用于存储 magazine 中每个字符的出现次数。

总结

本篇博客介绍了如何判断 ransomNote 是否能由 magazine 中的字符构成。通过使用哈希表记录字符出现次数,并逐个检查 ransomNote 中的字符是否满足条件,最终实现了判断功能。


http://www.ppmy.cn/devtools/14214.html

相关文章

计算机网络4——网络层2

文章目录 一、地址解析协议ARP二、IP数据报格式1、IP 数据报首部的固定部分中的各字段2、IP 数据报首部的可变部分 三、IP 层转发分组的过程1、流程2、案例分析3、最长前缀匹配4、分组转发算法5、使用二叉线索查找转发表 一、地址解析协议ARP 在实际应用中&#xff0c;我们经常…

数据可视化-ECharts Html项目实战(14)

在之前的文章中&#xff0c;我们深入学习ECharts鼠标左键触发。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 数据可视化-ECharts Html项目实战&#xff08;…

路由过滤与引入

实验要求与拓扑 实验思路 1.配置IP 2.分别启动rip协议和ospf协议&#xff0c;实现内布互通&#xff1b; 3.路由引入 --- 让两个rip和ospf两个协议可以相互学习路由&#xff1b; 4.在做路由引入的时候&#xff0c;做路由过滤&#xff0c;避免R4的环回被RIP学到&#xff1b; 5.使…

面试算法题之暴力求解

这里写目录标题 1 回溯1.1 思路及模板1.1 plus 排列组合子集问题1.2 例题1.2.1 全排列1.2.2 N 皇后1.2.3 N皇后问题 II1.2.4 子集 &#xff08;子集/排列问题&#xff09;1.2.4 组合(组合/子集问题)1.2.5 全排列 &#xff08;排列问题&#xff09;1.2.1做过1.2.6 子集II &#…

谷歌发布基于声学建模的无限虚拟房间增强现实鲁棒语音识别技术

声学室模拟允许在AR眼镜上以最少的真实数据进行训练&#xff0c;用于开发鲁棒的语音识别声音分离模型。 随着增强现实&#xff08;AR&#xff09;技术的强大和广泛应用&#xff0c;它能应用到各种日常情境中。我们对AR技术的潜能感到兴奋&#xff0c;并持续不断地开发和测试新…

《看漫画学C++》背后的故事1:艺术与科技的结合

引言&#xff1a; 在数字化浪潮中&#xff0c;艺术与科技的结合催生了无数创新。《看漫画学C》正是这一跨界合作的产物&#xff0c;它不仅是一本编程书籍&#xff0c;更是艺术与科技融合的典范。 一、相遇&#xff1a; 科技与艺术的火花作为一名专注于技术的软件程序员&…

openEuler 22.03 LTS SP3(华为欧拉)一键安装 Oracle 12CR2 RAC(220118) 数据库

前言 Oracle 一键安装脚本&#xff0c;演示 openEuler 22.03 LTS SP3 一键安装 Oracle 12CR2 RAC&#xff08;220118&#xff09; 过程&#xff08;全程无需人工干预&#xff09;&#xff1a;&#xff08;脚本包括 ORALCE PSU/OJVM 等补丁自动安装&#xff09; ⭐️ 脚本下载…

(一)JVM实战——jvm的组成部分详解

前言 本节内容是关于java虚拟机JVM组成部分的介绍&#xff0c;通过其组成架构图了解JVM的主要组成部分。 正文 ClassFile&#xff1a;字节码文件 - javac&#xff1a;javac前端编译器将源代码编译成符合jvm规范的.class文件&#xff0c;即字节码文件 - class文件的结构组成&a…