赎金信..

方法一

用整形数组映射26个字母 当出现就在对应位置++,统计magazine的每个字母次数

再对ransomNote字符串进行统计,如果magazine里的某个字母不足以支撑ransomNote里的某个字母,就返回false,如果都足以支撑就返回true

class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        int[] countc=new int[26];

        for(char c:magazine.toCharArray()){
            countc[c-'a']++;
            //记录magazine内每个字符出现几次
        }

        for(char c:ransomNote.toCharArray()){
            countc[c-'a']--;
            //当ransomNote对应字符出现一次 就减去一次
            if(countc[c-'a']<0){//当减去的次数不足以对应的次数时,则返回false
                return false;
            }
        }
        //当次数都足够或者刚好时 就返回true
        return true;
    }
}

方法二

用HashMap映射

HashMap不能用基本数据类型,而得用引用类型

原始类型   封装类

boolean      Boolean

char           Character

byte           Byte

short          Short

int              Integer

long           Long

float           Float

double      Double

class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        HashMap<Character,Integer> hashmap=new HashMap<Character,Integer>();
        for(char ch:magazine.toCharArray()){
            hashmap.put(ch,hashmap.getOrDefault(ch,0)+1);
            //getOrDefault获取ch的value的值 如果没有用0
        }
        for(char ch:ransomNote.toCharArray()){
            //获取ch对应的value的值 如果没有用0
            int count=hashmap.getOrDefault(ch,0);
            //如果val不足支撑返回false
            if(count<=0) return false;
            //足够支撑时 计数--
            hashmap.put(ch,count-1);
        }
        return true;
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值