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; } }