LeetCode 383. Ransom Note 自己的解法

本文介绍了一个简单的算法,用于判断字符串b是否能通过包含字符串a的所有字符及其数量来构建。使用了两个HashMap分别记录两个字符串中各字符的数量,并进行了比较。

题目

这个Ransom Note不知道怎么翻译好,算了不用在意这些细节我们直接读题目吧。题目的大致意思是,给定一个字符串a,然后再给定一个字符串b,判断b能不能由a构建出来。假定字符串中字符都是小写。

分析

怎么理解这个构建呢,我的理解是,字符串b中必须含有字符串a中的字符,而且必须全部都有。而且,字符串b中含有字符串a中的字符的个数必须不小于字符串a中的个数。
这样我们就构造出两个判断条件:
1、字符串b的字符种类至少要和字符串a相同,可以多但是不能少;
2、字符串b含有字符串a中字符的个数至少要和字符串a相同;

代码

public class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
    //这里构造两个HashMap,
        Map<Character,Integer> map = new HashMap<>();
        Map<Character,Integer> buket = new HashMap<>();
        //得到ransomNote中所有字符的个数
        for(int i=0;i<ransomNote.length();i++){
            if(map.containsKey(ransomNote.charAt(i))){
                map.put(ransomNote.charAt(i),map.get(ransomNote.charAt(i))+1);
            }
            else{
                map.put(ransomNote.charAt(i),1);
            }
        }
        //同理,得到magazine中所有字符的个数
        for(int i=0;i<magazine.length();i++){
            if(buket.containsKey(magazine.charAt(i))){
                buket.put(magazine.charAt(i),buket.get(magazine.charAt(i))+1);
            }
            else{
                buket.put(magazine.charAt(i),1);
            }
        }
        //根据以上两个条件作出判断,
        for(Map.Entry<Character, Integer> entry : map.entrySet()){
            if(!buket.containsKey(entry.getKey())){
                return false;
            }
            if(buket.get(entry.getKey())<entry.getValue()){
                return false;
            }
        }
        return true;
    }
}

这个代码的时间复杂度是线性的,空间复杂度也是线性的。

文件列表:FusionCompute8.0.0目录FusionCompute_Installer-8.0.0.zip ---------- Windows安装工具FusionCompute_CNA-8.0.0-X86_64.iso ------------ CNA计算节点安装镜像(操作系统)FusionCompute_CNA-8.0.0-ARM_64.iso ------------ CNA计算节点安装镜像(操作系统)FusionCompute_VRM-8.0.0-X86_64.iso ----------- VRM管理组件安装镜像(操作系统)FusionCompute_VRM-8.0.0-ARM_64.iso ----------- VRM管理组件安装镜像(操作系统)FusionCompute_VRM-8.0.0-X86_64.zip ----------- VRM管理组件虚机模板(操作系统)FusionCompute_VRM-8.0.0-ARM_64.zip ----------- VRM管理组件虚机模板(操作系统)FusionUpdateTool-8.0.0.zip ----------- FusionSphere8.0.0升级工具FusionComputeUpdateTool_8.0.1.SPH2.zip------------- FusionCompute8.0.1.SPH2升级工具FusionCompute_GpuCompiler-8.0.0-X86_64.zip ---------- 8.0.0 GPU升级包FusionCompute_VncViewer-8.0.0.zip -------- VNC升级包FusionSphere 虚拟化套件 8.0.0 产品文档 06.zip ----------- 8.0.0产品手册(安装、维护、操作等)FusionCompute_8.0.0_DefaultPassword.txt ---------- CNA/VRM/WEB页面默认密码(产品文档内有更全面的默认密码)FusionCompute8.0.1目录FusionCompute 8.0.1_Upgrade.zip ---------- 8.0.1升级包FusionCompute-LinuxInstaller-8.0.1.2-X86_64.zip --------- Linux安装工具FusionComputeUpdateTool_8.0.1.2.zip ------------- FusionCompute8.0.1升级工具FusionCompute_GpuCompiler-8.0.1-X86_64.zip ---------- 8.0.1 GPU升级包FusionCompute 8.0.1 产品文档 07.zip --------- 8.0.1产品手册(安装、维护、操作等)FusionCompute 8.0.1 升级指导书 03.zip --------- 升级指南FusionCompute 8.0.1 集成设计指导书 02.zip --------- 设计指导书FusionCompute 8.0.1 版本配套表 04.zip --------- 版本配套表FusionCompute 8.0.1.SPH2目录FusionCompute 8.0.1.SPH2_Upgrade.zip --------- 8.0.1.SPH2升级包FusionComputeUpdateTool_8.0.1.SPH2.zip --------- 8.0.1.SPH2升级工具
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值