首页 > 其他分享 >赎金信(力扣标准哈希表计数题)

赎金信(力扣标准哈希表计数题)

时间:2023-02-13 18:35:36浏览次数:42  
标签:ransomNote cnt return string 力扣 magazine 哈希 赎金 false

题目:

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

如果可以,返回 true ;否则返回 false

magazine 中的每个字符只能在 ransomNote 中使用一次。

思路:

想法一:

先使用map遍历magazine,字符数用值对表示,然后遍历ransomNote,若map里存在关键字,关键字-1,继续向后遍历,若值对为0,则表示不能,返回false

class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        unordered_map<char,int> m;
        for(char ch : magazine){
            ++m[ch];
        }
        for(int i = 0;i < ransomNote.size();++i){
            if(m[ransomNote[i]] > 0){
                --m[ransomNote[i]];
            }
            else if(m[ransomNote[i]] == 0){
                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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:ransomNote,cnt,return,string,力扣,magazine,哈希,赎金,false
From: https://www.cnblogs.com/isku-ran/p/17117320.html

相关文章

  • 哈希表
     classSolution{public:vector<int>intersect(vector<int>&nums1,vector<int>&nums2){if(nums1.size()>nums2.size()){return......
  • 力扣---1138. 字母板上的路径
    我们从一块字母板上的位置(0,0)出发,该坐标对应的字符为board[0][0]。在本题里,字母板为board=["abcde","fghij","klmno","pqrst","uvwxy","z"],如下所示。我们可......
  • 哈希学习笔记
    板:P3370【模板】字符串哈希复杂度:O(n)用途:将一串字符串映射到一个数怎么写?选取一个较小质数p选取一个较大质数mod1将字符串转换成一个p进制在mod1定义下的......
  • springboot 配置redis集群 JedisCluster 3主3从 哈希槽模式
    packagecom.estate.util;importredis.clients.jedis.*;importjava.util.HashSet;importjava.util.Set;publicclassRedisClient{privatestaticJedis......
  • 力扣---2. 两数相加
    给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表......
  • 力扣---1. 两数之和
    给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target 的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但......
  • 力扣---2335. 装满杯子需要的最短总时长
    现有一台饮水机,可以制备冷水、温水和热水。每秒钟,可以装满2杯不同类型的水或者1杯任意类型的水。给你一个下标从0开始、长度为3的整数数组amount,其中amount[0......
  • 杨辉三角(力扣简单题,resize())函数
    题目:给定一个非负整数numRows,生成「杨辉三角」的前numRows行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。示例1:输入:numRows=5输出:[[1],[1,1],[......
  • 重塑矩阵(力扣简单题)
    题目:在MATLAB中,有一个非常有用的函数reshape,它可以将一个mxn矩阵重塑为另一个大小不同(rxc)的新矩阵,但保留其原始数据。给你一个由二维数组mat表示的mxn矩......
  • 力扣---2155. 分组得分最高的所有下标
    给你一个下标从0开始的二进制数组nums,数组长度为n。nums可以按下标i(0<=i<=n)拆分成两个数组(可能为空):numsleft和numsright。   numsleft包含nums中......