给你两个字符串:ransomNote
和 magazine
,判断 ransomNote
能不能由 magazine
里面的字符构成。
如果可以,返回 true
;否则返回 false
。
magazine
中的每个字符只能在 ransomNote
中使用一次。
输入:ransomNote = "a", magazine = "b"
输出:false
输入:ransomNote = "aa", magazine = "ab"
输出:false
输入:ransomNote = "aa", magazine = "aab"
输出:true
class 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 中出现,并且出现次数是否足够。