1.题目描述
2.题解
i.哈希法
利用哈希表的特性,将magazine存入一个哈希表,记录字母和出现次数,接着遍历ransomNote判断哈希表中是否含有所有ransomNote中的元素,而判断操作细节是将哈希表中和遍历到的ransomNote元素一样的键值对的值(即出现个数)减一,直到小于零。
ii.数组法
创建一个数组来代替哈希表,长度为26(代表26个字母),每个元素代表出现的个数。其余的操作与哈希表类似。
3.代码示例
i.哈希法
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
char[] rNote=ransomNote.toCharArray();
char[] mNote=magazine.toCharArray();
Map<Character,Integer> mNoteMap=new HashMap<>();
mNoteMap=toHashMap(mNote);
int count=0;
//判断操作
for(int i=0;i<rNote.length;i++){
if(mNoteMap.containsKey(rNote[i])){
count=mNoteMap.get(rNote[i]);
if(count>0)
mNoteMap.put(rNote[i],--count);
else
return false;
}
else
return false;
}
return true;
}
//定义一个方法实现将数组转成哈希表的功能
public Map toHashMap(char[] inChar){
Map<Character,Integer> result=new HashMap<>();
int count=1;
int temp=0;
for(int i=0;i<inChar.length;i++){
if(result.containsKey(inChar[i])){
temp=result.get(inChar[i]);
result.put(inChar[i],++temp);
}
else
result.put(inChar[i],1);
}
return result;
}
}
ii.数组法
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
int[] mArr=new int[26];//代替哈希表的数组
//将magazine中的元素存入数组
for(char m:magazine.toCharArray()){
mArr[m-'a']++;
}
//判断操作
for(char r:ransomNote.toCharArray()){
if(mArr[r-'a']<=0)
return false;
else
mArr[r-'a']--;
}
return true;
}
}