(383)赎金信
解法一:利用map实现,完全是自己写的
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
unordered_map<char, int> result_map;
for (int i=0; i < ransomNote.length(); i++){
result_map[ransomNote[i]]++; //哈希映射
}
for (auto ch : magazine){
if (result_map.find(ch) != result_map.end()){
result_map[ch]--;
if(result_map[ch] == 0)
result_map.erase(ch); //如果出现的次数为0,则删除
}
}
for(int i = 0; i < result_map.size(); i++){
if(result_map[i] != 0){
return false;
}
}
return true;
}
};
解法二:利用数组实现,标准答案
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
int record[26] = {0};
for (int i = 0; i < magazine.length(); i++) {
// 通过recode数据记录 magazine里各个字符出现次数
record[magazine[i]-'a'] ++; //注意学习字符串到数组的哈希函数
}
for (int j = 0; j < ransomNote.length(); j++) {
// 遍历ransomNote,在record里对应的字符个数做--操作
record[ransomNote[j]-'a']--;
// 如果小于零说明 magazine里出现的字符,ransomNote没有
if(record[ransomNote[j]-'a'] < 0) {
return false;
}
}
return true;
}
};