代码随想录-哈希表 -7.赎金信

. - 力扣(LeetCode)

class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        //思路:建立一个map表,将magazined的值放到key里,values存放这个元素的数目
        //遍历ransomNote,找到一个就values减一,找不到就返回false
        HashMap<Character,Integer> map = new HashMap<>();
        for(char m:magazine.toCharArray()){
            map.put(m,map.getOrDefault(m,0)+1);
        }
        for(char r:ransomNote.toCharArray()){
            if(map.containsKey(r)&&map.get(r)>=1){
               map.put(r,map.get(r)-1);
        }
        else{
            return false;
        }
        }
        return true;

    }
}

其实在本题的情况下,使用map的空间消耗要比数组大一些的,因为map要维护红黑树或者哈希表,而且还要做哈希函数,是费时的!数据量大的话就能体现出来差别了。 所以数组更加简单直接有效!

数组的思路是,建立一个26个元素的数组,每个字母的位置是固定的,统计字母个数。

class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        if (ransomNote.length() > magazine.length()) {
            return false;
        }
        int[] cnt = new int[26];
        for (char c : magazine.toCharArray()) {
            cnt[c - 'a']++;
        }
        for (char c : ransomNote.toCharArray()) {
            cnt[c - 'a']--;
            if(cnt[c - 'a'] < 0) {
                return false;
            }
        }
        return true;
    }
}

作者:力扣官方题解
链接:https://leetcode.cn/problems/ransom-note/solutions/1135839/shu-jin-xin-by-leetcode-solution-ji8a/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值