赎金信-力扣

这道题想到的解法是使用一个哈希表来存储magazine里每个字符出现的次数,然后遍历ransomNote,出现对应的字母则哈希表中对应的值减一,当查找不到某个字符,或者某个字符的值小于0时,则返回false。代码如下:

cpp 复制代码
class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        unordered_map<char, int> mp;
        for(auto str : magazine){
            mp[str]++;
        }

        for(auto str : ransomNote){
            auto it = mp.find(str);
            if(it != mp.end()){
                it->second--;
                if(it->second < 0){
                    return false;
                }
            }else{
                return false;
            }
        }
        return true;
    }
};

在代码随想录看到使用数组做哈希表,在这道题中,使用数组更加简单有效。代码如下:

cpp 复制代码
class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        int record[26] = {0};
        //add
        if (ransomNote.size() > magazine.size()) {
            return false;
        }
        for (int i = 0; i < magazine.length(); i++) {
            // 通过record数据记录 magazine里各个字符出现次数
            record[magazine[i]-'a'] ++;
        }
        for (int j = 0; j < ransomNote.length(); j++) {
            // 遍历ransomNote,在record里对应的字符个数做--操作
            record[ransomNote[j]-'a']--;
            // 如果小于零说明ransomNote里出现的字符,magazine没有
            if(record[ransomNote[j]-'a'] < 0) {
                return false;
            }
        }
        return true;
    }
};
相关推荐
z人间防沉迷k11 分钟前
贪心、分治和回溯算法
算法
小刘不想改BUG23 分钟前
LeetCode LCR 010 和为 K 的子数组 (Java)
java·算法·leetcode
朱剑君39 分钟前
第七天——贪心算法——股票买卖问题
算法·贪心算法
ai.Neo42 分钟前
牛客网NC276110题解:小红的数组重排
数据结构·算法·排序算法
wniuniu_1 小时前
socc19 echash部分代码讲解 二 hashtable
算法·哈希算法
小雅痞2 小时前
[Java][Leetcode middle] 12. 整数转罗马数字
java·linux·leetcode
Espresso Macchiato2 小时前
Leetcode 3551. Minimum Swaps to Sort by Digit Sum
leetcode·排序·leetcode medium·leetcode 3551·leetcode周赛450
ai.Neo2 小时前
牛客网NC276055:三根木棒能否组成三角形问题详解(ACM中的A题)
数据结构·c++·算法
じ☆ve 清风°2 小时前
滑动窗口算法详解与C++实现
开发语言·c++·算法
东莞呵呵3 小时前
吴恩达机器学习(1)——机器学习算法分类
算法·机器学习·分类