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