①哈希法实现思路
1.哈希表工作过程:
第一次循环:存储大集合里面所有字符串出现次数
第二次循环:减去"小集合"里面所有字符串出现的次数("大集合"-”小集合的差集,存放在哈希表中“)
最终循环判断:如果哈希表内存在某个元素的值小于0,则说明小集合无法由大集合里面的所有字符构成。
2.哈希表最终表示两个集合的差集(差集:题目意义的"大集合"-“小集合”)
大集合是magazine
小集合是ransomNote
②代码实现
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
int Hash[26]={0};
//存储大集合里面所有字符串出现次数
for(const auto &m:magazine){
Hash[m-'a']++;
}
//减去"小集合"里面所有字符串出现的次数(得到差集)
for(const auto &m:ransomNote){
Hash[m-'a']--;
}
//差集如果值小于0,表示无法由大集合组成小集合(不是包含关系)
for(const auto &h:Hash){
if(h<0)return false;
}
return true;
return 0;
}
};