《LeetCode之每日一题》:282.赎金信
Posted 是七喜呀!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《LeetCode之每日一题》:282.赎金信相关的知识,希望对你有一定的参考价值。
赎金信
题目链接: 赎金信
有关题目
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
示例 1:
输入:ransomNote = "a", magazine = "b"
输出:false
示例 2:
输入:ransomNote = "aa", magazine = "ab"
输出:false
示例 3:
输入:ransomNote = "aa", magazine = "aab"
输出:true
提示:
1 <= ransomNote.length, magazine.length <= 10^5
ransomNote 和 magazine 由小写英文字母组成
题解
法一:哈希表之字符统计
struct hashTable
int key;
int val;
UT_hash_handle hh;
;
bool canConstruct(char * ransomNote, char * magazine)
int m = strlen(ransomNote), n = strlen(magazine);
if (m > n)
return false;
struct hashTable *freq = NULL;
for (int i = 0; i < n; i++)
int ikey = magazine[i];
struct hashTable *temp;
HASH_FIND_INT(freq, &ikey, temp);
if (NULL == temp)
temp = (struct hashTable*)malloc(sizeof(struct hashTable));
temp->key = ikey, temp->val = 1;
HASH_ADD_INT(freq, key, temp);
else
temp->val++;
for (int i = 0; i < m; i++)
int ikey = ransomNote[i];
struct hashTable* temp;
HASH_FIND_INT(freq, &ikey, temp);
if (NULL == temp) return false;//该字母不在magazine中
else if (temp->val == 0) return false;//该字母不够
else temp->val--;
return true;
以上是关于《LeetCode之每日一题》:282.赎金信的主要内容,如果未能解决你的问题,请参考以下文章