[Java·算法·简单] LeetCode 383. 赎金信 详细解读

简介: [Java·算法·简单] LeetCode 383. 赎金信 详细解读

题目

给你两个字符串ransomNotemagazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。

如果可以,返回 true ;否则返回 false

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


示例

示例1

输入:ransomNote = "a", magazine = "b"

输出:false


示例2

输入:ransomNote = "aa", magazine = "ab"

输出:false


示例3

输入:ransomNote = "aa", magazine = "aab"

输出:true


提示

 

👉️ 力扣原文

 

class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        HashMap<Character,Integer> magazineMap = new HashMap<>();
 
        for(char c : magazine.toCharArray()){
            magazineMap.put(c,magazineMap.getOrDefault(c,0)+1);
        }
 
        for(char c : ransomNote.toCharArray()){
            if(!magazineMap.containsKey(c) || magazineMap.get(c)==0){
                return false;
            }
            magazineMap.put(c,magazineMap.get(c) - 1);
        }
        return true;
    }
}


详细解读

这段代码是一个解决 "赎金信" 问题的 Java 方法。下面是对这段代码的详细解读:


1.canConstruct 方法

  • 这是一个公共方法,返回一个布尔值,指示是否可以从 magazine 中的字符构建出 ransomNote。
  • 参数 ransomNote 表示赎金信,参数 magazine 表示杂志内容。


2.创建 HashMap

  • 在方法的开头,创建了一个 HashMap 对象 magazineMap,用于存储 magazine 中每个字符的出现次数。


3.遍历 magazine 字符串

  • 使用 for 循环遍历 magazine 字符串的每个字符。
  • 对于每个字符,使用 magazineMap.put(c, magazineMap.getOrDefault(c, 0) + 1); 将其添加到 magazineMap 中,如果该字符已经存在于 magazineMap 中,则将其出现次数加一;如果不存在,则将其添加到 magazineMap 中,并将出现次数设置为 1。


4.遍历 ransomNote 字符串:


  • 使用 for 循环遍历 ransomNote 字符串的每个字符。
  • 对于每个字符,首先检查它是否存在于 magazineMap 中,如果不存在或者出现次数已经为 0,则说明无法从 magazine 中构建出 ransomNote,直接返回 false。
  • 如果存在,则将其出现次数减一,表示已经使用了该字符。


5.返回结果:


  • 如果成功遍历完 ransomNote 字符串中的所有字符,说明可以从 magazine 中构建出 ransomNote,返回 true。


这段代码的核心思想是通过 HashMap 存储 magazine 中每个字符的出现次数,然后遍历 ransomNote 字符串,逐个检查其中的字符是否在 magazine 中出现,并且出现次数是否足够。

相关文章
|
5天前
|
算法 安全 Java
性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
【4月更文挑战第28天】性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
34 1
性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
|
3天前
|
缓存 算法 Java
数据结构~缓存淘汰算法--LRU算法(Java的俩种实现方式,万字解析
数据结构~缓存淘汰算法--LRU算法(Java的俩种实现方式,万字解析
|
3天前
|
NoSQL 算法 Java
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
|
5天前
|
存储 算法
Leetcode 30天高效刷数据结构和算法 Day1 两数之和 —— 无序数组
给定一个无序整数数组和目标值,找出数组中和为目标值的两个数的下标。要求不重复且可按任意顺序返回。示例:输入nums = [2,7,11,15], target = 9,输出[0,1]。暴力解法时间复杂度O(n²),优化解法利用哈希表实现,时间复杂度O(n)。
22 0
|
5天前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
|
5天前
|
搜索推荐 算法 Java
Java实现的常用八种排序算法
提到数据结构与算法,无法避免的一点就包含排序,熟练的掌握各种排序算法则是一个程序员必备的素质之一,除此之外,排序算法也是当下各大技术公司比较喜欢问的技术点,所以,就这一点JavaBuild整理了常见的8种排序算法
13 0
|
5天前
|
机器学习/深度学习 数据采集 算法
使用 Java 实现机器学习算法
【4月更文挑战第19天】Java在数据驱动时代为机器学习提供支持,具备丰富的数学和数据结构库,适用于实现线性回归、决策树、SVM和随机森林等算法。实现时注意数据预处理、模型选择、评估指标和可视化。利用Java的库和编程能力可构建高效模型,但需按问题需求选择合适技术和优化方法。
|
5天前
|
算法
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
23 3
|
5天前
|
存储 算法 Java
【数据结构与算法】1、学习动态数组数据结构(基本模拟实现 Java 的 ArrayList 实现增删改查)
【数据结构与算法】1、学习动态数组数据结构(基本模拟实现 Java 的 ArrayList 实现增删改查)
45 0
|
11月前
|
存储 算法 Java
数据结构算法学习打卡week2 (Java)
数据结构算法学习打卡week2 (Java)
55 0