《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.赎金信的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 383. 赎金信 / 372. 超级次方 / 1816. 截断句子

每日leetcode-数组-383. 赎金信

算法千题案例每日LeetCode打卡——69.赎金信

算法千题案例每日LeetCode打卡——69.赎金信

「 每日一练,快乐水题 」383. 赎金信

LeetCode 383. 赎金信