2025年- G15-Lc89-383.赎金记录-java版

news/2025/2/24 9:26:54

1.题目描述
给定两个字符串 ransomNote 和 magazine,如果 ransomNote 可以通过使用 magazine 中的字母构造出来,返回 true,否则返回 false。

magazine 中的每个字母只能使用一次。

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

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

示例 3:
输入:ransomNote = “aa”, magazine = “aab” 输出:true
2.思路

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
思路2:
维护一个magazine的数组,用字符之间的ASCII码值相减代表索引下标。然后如果magazine数组某字符一开始就为0说明,不足以提供足够的字符数量构造random数组的字符,所以返回false.
思路3:
什么时候返回 true?
返回 true 的情况是:

ransomNote 中的每个字符都能从 magazine 中找到,并且频次足够。即,ransomNote 中每个字母在 magazine 中的出现次数都不超过其实际的出现次数。
示例:
ransomNote = “aab”, magazine = “aab”:

m_cnt 会被更新为 [2, 1, 0, 0, …, 0]。
检查 ransomNote 的字符:
第一个 a,m_cnt[0] 为 2,减 1,更新为 1。
第二个 a,m_cnt[0] 为 1,减 1,更新为 0。
第三个 b,m_cnt[1] 为 1,减 1,更新为 0。
所有字符都能找到且满足要求,返回 true。
ransomNote = “abc”, magazine = “aab”:

m_cnt 会被更新为 [2, 1, 0, 0, …, 0]。
检查 ransomNote 的字符:
第一个 a,m_cnt[0] 为 2,减 1,更新为 1。
第二个 b,m_cnt[1] 为 1,减 1,更新为 0。
第三个 c,m_cnt[2] 为 0,无法找到足够的字符 c。
因为找不到字符 c,返回 false。
总结:
return true; 在最后的目的是,只有在 ransomNote 中的所有字符都能从 magazine 中找到并且数量足够时,才返回 true,表示可以构建出 ransomNote 字符串。如果在过程中发现某个字符无法满足要求(即 m_cnt[c - ‘a’] == 0),则立即返回 false。

3.代码实现

java">class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        //如果randsomNote的长度大于magazine的长度
        if(ransomNote.length()>magazine.length())
        {
            return false;
        }
        int[] m_cnt=new int[26];
        for(char c:magazine.toCharArray())
        {
          m_cnt[c-'a']++;//m_cnt数组,每个数组元素初始化是赋值为0,然后根据magazine里面出现的字母数,分别实现计数
        }

        for(char c:ransomNote.toCharArray())
        {
            if(m_cnt[c-'a']==0){return false;}
            //magazine数组里面该元素本身就是0,说明magazine数组元素无法构造ran数组的元素
            m_cnt[c-'a']--;
        }
        return true;

        
    }
}

http://www.niftyadmin.cn/n/5864177.html

相关文章

Element UI日期选择器默认显示1970年解决方案

目录 问题背景 问题根源 1. 数据绑定类型错误 2. 初始化逻辑错误 解决方案 核心思路 步骤 1:正确初始化日期对象 步骤 2:处理数据交互 步骤 3:处理年份切换事件 完整代码示例 注意事项 1. 时区问题 2. 格式化绑定值 常见问题 1. 为什…

C++之旅-C++11的深度剖析(1)

目录 前言/背景 1.C11的发展历史 2.列表初始化 2.1 C98传统的{} 2.2 C11中的{} 2.3 C11中的std::initializer_list 3.右值引用 3.1 左值和右值 3.2 左值引用和右值引用 3.3 引用延长生命周期 3.4 左值和右值的参数匹配 结束语 前言/背景 随着现代软件开发的快速发展…

改进A*算法并用于城市无人机路径规划

独家原创!改进A*算法进行城市无人机路径规划,考虑碰撞,飞行高度等优化启发式搜索。所有指标超过A*和A算法!附有完整的文档说明 算法设计、毕业设计、期刊专利!感兴趣可以联系我。 🏆代码获取方式1&#xff…

UE_C++ —— Logging in Unreal

目录 一,UE_LOG Log Verbosity Console Commands Logging Fundamental Data Types Define Your Own Log Category 二,UE_LOGFMT On-screen debug messages 日志是一种非常实用的调试工具,可以详细说明代码当前的执行逻辑;可…

美颜相机1.0

项目开发步骤 1 界面开发 美颜相机界面构成: 标题 尺寸 关闭方式 位置 可视化 2 创建主函数调用界面方法 3 添加两个面板 一个是按钮面板一个是图片面板 用JPanel 4 添加按钮到按钮面吧【注意:此时要用初始化按钮面板的方法initBtnPanel 并且将按钮添…

【嵌入式Linux应用开发基础】多线程编程

目录 一、基本概念 二、相关 API 2.1. 线程创建 2.2. 线程等待 2.3. 线程退出 2.4. 互斥锁 2.5. 条件变量 2.6. 使用示例 三、线程的属性设置 四、多线程编程中的问题和同步 五、多线程编程的实践 六、参考资料 在嵌入式 Linux 应用开发中,多线…

‌挖数据平台对接DeepSeek推出一键云端部署功能:API接口驱动金融、汽车等行业智能化升级

云端部署 引言:当数据生产力遇上云端智能化 2025年2月23日,国内领先的数据服务商挖数据平台宣布与人工智能巨头DeepSeek达成战略合作,正式推出“一键云端部署”功能。这一功能以API(应用程序接口)为核心,通…

c++入门-------命名空间、缺省参数、函数重载

C系列 文章目录 C系列前言一、命名空间二、缺省参数2.1、缺省参数概念2.2、 缺省参数分类2.2.1、全缺省参数2.2.2、半缺省参数 2.3、缺省参数的特点 三、函数重载3.1、函数重载概念3.2、构成函数重载的条件3.2.1、参数类型不同3.2.2、参数个数不同3.2.3、参数类型顺序不同 前言…