Count character frequencies of magazine in a hash map/array. Decrement counts for ransomNote; return false if count falls below zero.
class Solution:
def canConstruct(self, ransomNote: str, magazine: str) -> bool:
counts = collections.Counter(magazine)
for c in ransomNote:
if counts[c] <= 0:
return False
counts[c] -= 1
return True
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
HashMap counts = new HashMap<>();
for (char c : magazine.toCharArray()) {
counts.put(c, counts.getOrDefault(c, 0) + 1);
}
for (char c : ransomNote.toCharArray()) {
if (!counts.containsKey(c) || counts.get(c) <= 0) {
return false;
}
counts.put(c, counts.get(c) - 1);
}
return true;
}
}