import java.util.*; import java.util.HashMap; import java.util.Map; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param ransomNote string字符串 * @param magazine string字符串 * @return bool布尔型 */ public boolean canConstruct (String ransomNote, String magazine) { // write code here if(magazine.length()<ransomNote.length()) { return false; } HashMap<Character, Integer> map=new HashMap<>(); HashMap<Character, Integer> map2=new HashMap<>(); for (int i = 0; i < ransomNote.length(); i++) { map.put(ransomNote.charAt(i), map.getOrDefault(ransomNote.charAt(i), 0)+1); } for (int i = 0; i < magazine.length(); i++) { map2.put(magazine.charAt(i), map2.getOrDefault(magazine.charAt(i),0)+1); } for (Character c : map.keySet()) { if(map2.containsKey(c)) { if(map2.get(c)-map.get(c)<0) { return false; } }else { return false; } } return true; } }
思路其实不难,拿两个哈希表来装这两个字符串中每个字符出现的字数,然后再遍历第一个哈希表的键,判断第二个哈希表是否包含该键,如果不包含就返回false;如果包含再判断第二个哈希表该键所对应的值是否足够,如果不足够就直接返回false;