方法一
用整形数组映射26个字母 当出现就在对应位置++,统计magazine的每个字母次数
再对ransomNote字符串进行统计,如果magazine里的某个字母不足以支撑ransomNote里的某个字母,就返回false,如果都足以支撑就返回true
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
int[] countc=new int[26];
for(char c:magazine.toCharArray()){
countc[c-'a']++;
//记录magazine内每个字符出现几次
}
for(char c:ransomNote.toCharArray()){
countc[c-'a']--;
//当ransomNote对应字符出现一次 就减去一次
if(countc[c-'a']<0){//当减去的次数不足以对应的次数时,则返回false
return false;
}
}
//当次数都足够或者刚好时 就返回true
return true;
}
}
方法二
用HashMap映射
HashMap不能用基本数据类型,而得用引用类型
原始类型 封装类
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
HashMap<Character,Integer> hashmap=new HashMap<Character,Integer>();
for(char ch:magazine.toCharArray()){
hashmap.put(ch,hashmap.getOrDefault(ch,0)+1);
//getOrDefault获取ch的value的值 如果没有用0
}
for(char ch:ransomNote.toCharArray()){
//获取ch对应的value的值 如果没有用0
int count=hashmap.getOrDefault(ch,0);
//如果val不足支撑返回false
if(count<=0) return false;
//足够支撑时 计数--
hashmap.put(ch,count-1);
}
return true;
}
}