leetcode 383.赎金信 JAVA

题目

image-20240319092818352

思路

1.这道题最直接的想法就是我们用一个HashMap来统计magazine里每个字符出现的次数,其中key是字符,value是该字符出现的次数。然后再依次遍历ransomNote里的每个字符,如果在HashMap里找不到该字符,或者能找到,但是value<=0,那么就要返回false了。反之则继续遍历。

2.这道题里说了ransomNote和magazine都是由小写字母组成。相比HashMap(底层是哈希表),数组哈希空间占有更小,运行会更有效率。所以我们用数组哈希来做。

代码

//HashMap

import java.util.HashMap;

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        HashMap<Character, Integer> map = new HashMap<>();
        char[] r = ransomNote.toCharArray();
        char[] m = magazine.toCharArray();
        for (char c : m) {
            if (map.containsKey(c)) {
                int value = map.get(c);
                map.put(c, value + 1);
            } else {
                map.put(c, 1);
            }
        }
        for (char c : r) {
            if (map.containsKey(c) && map.get(c) > 0) {
                int value = map.get(c);
                map.put(c, value - 1);
            } else {
                return false;
            }
        }
        return true;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

//哈希数组


//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        int[] res = new int[26];
        for (char c : magazine.toCharArray()) {
            res[c - 'a']++;
        }
        for (char c : ransomNote.toCharArray()) {
            res[c - 'a']--;
        }
        for (int i : res) {
            if (i < 0) {
                return false;
            }
        }
        return true;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值