import java.util.*;
public class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        // 若ransomNote长度大于magazine,直接返回false(不可能构成)
        if (ransomNote.length() > magazine.length()) {
            return false;
        }

        // 统计magazine中每个字符的出现次数
        Map<Character, Integer> countMap = new HashMap<>();
        for (int i = 0; i < magazine.length(); i++) {
            char c = magazine.charAt(i); // 正确获取字符:charAt(i)
            // 计数+1(若不存在则默认0)
            countMap.put(c, countMap.getOrDefault(c, 0) + 1);//统计c出现次数。没有默认为1
        }

        // 检查ransomNote的每个字符是否能从magazine中找到足够的数量
        for (int i = 0; i < ransomNote.length(); i++) {
            char c = ransomNote.charAt(i);
            // 若magazine中没有该字符,或数量已耗尽,返回false
            if (!countMap.containsKey(c) || countMap.get(c) == 0) {
                return false;
            }
            // 使用后数量-1
            countMap.put(c, countMap.get(c) - 1);//出现一次默认减1
        }

        // 所有字符都能匹配,返回true
        return true;
    }
}