
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
输入:ransomNote = "a", magazine = "b"
输出:false输入:ransomNote = "aa", magazine = "ab"
输出:false输入:ransomNote = "aa", magazine = "aab"
输出:trueclass Solution {
public boolean canConstruct(String ransomNote, String magazine) {
HashMap<Character,Integer> magazineMap = new HashMap<>();
for(char c : magazine.toCharArray()){
magazineMap.put(c,magazineMap.getOrDefault(c,0)+1);
}
for(char c : ransomNote.toCharArray()){
if(!magazineMap.containsKey(c) || magazineMap.get(c)==0){
return false;
}
magazineMap.put(c,magazineMap.get(c) - 1);
}
return true;
}
}这段代码是一个解决 "赎金信" 问题的 Java 方法。下面是对这段代码的详细解读:
canConstruct 方法:
ransomNote 表示赎金信,参数 magazine 表示杂志内容。magazineMap,用于存储 magazine 中每个字符的出现次数。for 循环遍历 magazine 字符串的每个字符。magazineMap.put(c, magazineMap.getOrDefault(c, 0) + 1); 将其添加到 magazineMap 中,如果该字符已经存在于 magazineMap 中,则将其出现次数加一;如果不存在,则将其添加到 magazineMap 中,并将出现次数设置为 1。for 循环遍历 ransomNote 字符串的每个字符。magazineMap 中,如果不存在或者出现次数已经为 0,则说明无法从 magazine 中构建出 ransomNote,直接返回 false。true。这段代码的核心思想是通过 HashMap 存储 magazine 中每个字符的出现次数,然后遍历 ransomNote 字符串,逐个检查其中的字符是否在 magazine 中出现,并且出现次数是否足够。