[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 中出现,并且出现次数是否足够。

相关文章
|
19天前
|
算法 Java C语言
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
|
6天前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
|
11天前
|
机器学习/深度学习 数据采集 算法
使用 Java 实现机器学习算法
【4月更文挑战第19天】Java在数据驱动时代为机器学习提供支持,具备丰富的数学和数据结构库,适用于实现线性回归、决策树、SVM和随机森林等算法。实现时注意数据预处理、模型选择、评估指标和可视化。利用Java的库和编程能力可构建高效模型,但需按问题需求选择合适技术和优化方法。
|
11天前
|
算法
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
18 3
|
11天前
|
算法
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
14 3
|
11天前
|
算法
代码随想录算法训练营第五十六天 | LeetCode 647. 回文子串、516. 最长回文子序列、动态规划总结
代码随想录算法训练营第五十六天 | LeetCode 647. 回文子串、516. 最长回文子序列、动态规划总结
31 1
|
12天前
|
算法 DataX
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
|
15天前
|
存储 Java C++
leetcode 2525 根据规则将箱子分类 c++ pyhton java c题解
leetcode 2525 根据规则将箱子分类 c++ pyhton java c题解
14 1
|
21天前
|
算法 安全 Java
java代码 实现AES_CMAC 算法测试
该代码实现了一个AES-CMAC算法的简单测试,使用Bouncy Castle作为安全提供者。静态变量K定义了固定密钥。`Aes_Cmac`函数接受密钥和消息,返回AES-CMAC生成的MAC值。在`main`方法中,程序对给定的消息进行AES-CMAC加密,然后模拟接收ECU的加密结果并进行比较。如果两者匹配,输出&quot;验证成功&quot;,否则输出&quot;验证失败&quot;。辅助方法包括将字节转为16进制字符串和将16进制字符串转为字节。
|
28天前
|
搜索推荐 Java
Java排序算法
Java排序算法
18 0