CanTechLab

Can

leetcode:383.赎金信

2024-03-30

Leetcode题目链接:383. 赎金信

题目描述:

给你两个字符串:ransomNotemagazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。

如果可以,返回 true ;否则返回 falsemagazine 中的每个字符只能在 ransomNote 中使用一次。

解题思路:

使用哈希表(unordered_map)统计a-z字符出现的次数

magazine字符串进行处理,利用哈希表中的count()方法判断是否存在字符

若存在则相应字母数量+1

若不存在则使用emplace()方法创建相应的键值对,并将该字母的初始数量置为0

ransomNote 字符串进行处理,利用哈希表中的count()方法判断是否存在字符

若存在则相应字母数量-1

若不存在则返回false,意味着无法使用magazine中的字符构成ransomNote 字符串(包括不存在该字母或字母不够用的情况)

我的答案:

class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        int n = magazine.size();
        int m = ransomNote.size();
        unordered_map<char, int> map;
        for(int i = 0;i < n;i++){
            if(map.count(magazine[i]))map[magazine[i]]++;
            else map.emplace(magazine[i], 0);
        }
        for(int i = 0;i < m;i++){
            if(map.count(ransomNote[i])){
                if(map[ransomNote[i]] >= 0){
                    map[ransomNote[i]]--;
                }else{
                    return false;
                }
            }
            else return false;
        }
        return true;
    }
};

提交结果:

官方答案:

class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        if (ransomNote.size() > magazine.size()) {
            return false;
        }
        vector<int> cnt(26);
        for (auto & c : magazine) {
            cnt[c - 'a']++;
        }
        for (auto & c : ransomNote) {
            cnt[c - 'a']--;
            if (cnt[c - 'a'] < 0) {
                return false;
            }
        }
        return true;
    }
};

作者:力扣官方题解
链接:https://leetcode.cn/problems/ransom-note/solutions/1135839/shu-jin-xin-by-leetcode-solution-ji8a/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。