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

相关文章
|
1月前
|
存储 算法 安全
探究‘公司禁用 U 盘’背后的哈希表算法与 Java 实现
在数字化办公时代,信息安全至关重要。许多公司采取“禁用U盘”策略,利用哈希表算法高效管理外接设备的接入权限。哈希表通过哈希函数将设备标识映射到数组索引,快速判断U盘是否授权。例如,公司预先将允许的U盘标识存入哈希表,新设备接入时迅速验证,未授权则禁止传输并报警。这有效防止恶意软件和数据泄露,保障企业信息安全。 代码示例展示了如何用Java实现简单的哈希表,模拟公司U盘管控场景。哈希表不仅用于设备管理,还在文件索引、用户权限等多方面助力信息安全防线的构建,为企业数字化进程保驾护航。
|
4月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
125 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
4月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
58 0
|
3月前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
4月前
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
47 2
|
4月前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
148 2
|
6月前
|
算法
测试工程师的技能升级:LeetCode算法挑战与职业成长
这篇文章通过作者亲身体验LeetCode算法题的过程,探讨了测试工程师学习算法的重要性,并强调了算法技能对于测试职业成长的必要性。
101 1
测试工程师的技能升级:LeetCode算法挑战与职业成长
|
4月前
|
算法 Java
LeetCode(一)Java
LeetCode(一)Java
|
6月前
|
搜索推荐 算法 Java
|
6月前
|
搜索推荐 算法 Java
经典排序算法之-----选择排序(Java实现)
这篇文章通过Java代码示例详细解释了选择排序算法的实现过程,包括算法的基本思想、核心代码、辅助函数以及测试结果,展示了如何通过选择排序对数组进行升序排列。
经典排序算法之-----选择排序(Java实现)

热门文章

最新文章