LeetCode 383 赎金信

发布时间 2023-10-10 20:47:15作者: gao79138

LeetCode 383 赎金信

1. 题目地址

https://leetcode.cn/problems/ransom-note/?envType=study-plan-v2&envId=top-interview-150

2. 题解

    这道题是一道哈希表的经典例题,具体步骤如下:
        1.  定义哈希表unordered_map<char,int> h。
            其中char代表字符,int代表该字符的出现次数。
        2.  遍历magazine里面的每一个字符,并统计出现次数。
        3.  遍历ransomNote里面的每一个字符,会出现如下情况:
            3.1 如果该字符跟哈希表当中的有对应,那么出现次数-1。
            3.2 如果该字符跟哈希表当中的没有对应,那么代表ransomNote不能由magazine里面的字符构成。
            3.3 如果该字符在哈希表查找时,发现已经为0,那么代表ransomNote也不能由magazine里面的字符构成。
        4.  如果上述情况都没有出现,那么返回true即可。

3. 代码

class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        // //声明哈希表或数组
        // //第一个是字符,第二个是该字符出现的次数
        // unordered_map<char,int> h;
        // //统计字符
        // for(int i = 0; i < magazine.size(); i ++){
        //     h[magazine[i]]++;
        // }
        // for(int i = 0; i < ransomNote.size(); i ++){
        //     if(!h[ransomNote[i]]){
        //         return false;
        //     }
        //     h[ransomNote[i]]--;
        // }
        // return true;
        int h[26];
        memset(h,0,sizeof(h));
        for(int i = 0; i < magazine.size(); i ++){
            h[magazine[i] - 'a']++;
        }
        for(int i = 0; i < ransomNote.size(); i ++){
            if(!h[ransomNote[i] - 'a']){
                return false;
            }
            h[ransomNote[i] - 'a']--;
        }
        return true;
    }
};