383. 赎金信C++

Problem: 383. 赎金信

文章目录

解题思路

  1. 建立两个26长度的数组,初始值为0;
  2. 对两封信按照字母顺序进行对应位置的数组元素加一统计;
  3. 对勒索信中非0的数组元素与赎金信中进行比对,若是小于或者等于则是通过,可以构成;

解题方法

使用两个数组raCount和maCount分别计量两封信的小写字母组成个数;

统计结束后,直接用勒索信的每个非空字母位置的元素减去对应的赎金信的位置元素,若能拼凑成功则raCount-maCount必定<=0,反之则是raCount-maCount>0的时候就是无法拼凑成功,直接返回false;

如果全部通过,则返回true;

复杂度

时间复杂度:

时间复杂度: O ( l e n R + l e n M + 26 ) O(lenR + lenM + 26) O(lenR+lenM+26)

空间复杂度:

空间复杂度: O ( 52 ) = O ( 1 ) O(52)=O(1) O(52)=O(1)

Code

cpp 复制代码
class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        int raCount[26]={0},maCount[26]={0};
        int lenR=ransomNote.size();
        int lenM=magazine.size();
        for(int i=0;i<lenR;i++){
            raCount[(ransomNote[i]-'a')]++;
        }
        for(int i=0;i<lenM;i++){
            maCount[(magazine[i]-'a')]++;
        }
        for(int i=0;i<26;i++){
            if(raCount[i]!=0 && (raCount[i]-maCount[i])>0)
            return false;
        }
        return true;
    }
};

Code优化

其实可以只使用一个统计数组,先将赎金信的字母统计加入,在按照勒索信的需求减去,如果有不足,对应的数组元素就小于0

空间复杂度: O ( 26 ) = O ( 1 ) O(26)=O(1) O(26)=O(1)

cpp 复制代码
class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        int maCount[26]={0};
        int lenR=ransomNote.size();
        int lenM=magazine.size();
        for(int i=0;i<lenM;i++){
            maCount[(magazine[i]-'a')]++;
        }
        for(int i=0;i<lenR;i++){
            maCount[(ransomNote[i]-'a')]--;
        }
        for(int i=0;i<26;i++){
            if(maCount[i]<0)
            return false;
        }
        return true;
    }
};
相关推荐
CoovallyAIHub24 分钟前
9个视觉语言模型工厂实测:Qwen 87.9%碾压全场,你的显卡能跑哪个?
算法
SparkX开源AI知识库1 小时前
手摸手带你安装OpenClaw并对接飞书
算法·架构
得物技术1 小时前
搜索 C++ 引擎回归能力建设:从自测到工程化准出|得物技术
c++·后端·测试
一语07161 小时前
3分钟搞懂深度学习AI:实操篇:卷积层
人工智能·算法
CoovallyAIHub20 小时前
181小时视频丢给GPT-5,准确率只有15%——南大联合NVIDIA等五校发布多模态终身理解数据集
深度学习·算法·计算机视觉
CoovallyAIHub21 小时前
CVPR 2026 | GS-CLIP:3D几何先验+双流视觉融合,零样本工业缺陷检测新SOTA,四大3D工业数据集全面领先!
深度学习·算法·计算机视觉
xlp666hub21 小时前
Leetcode 第三题:用C++解决最长连续序列
c++·leetcode
会员源码网1 天前
构造函数抛出异常:C++对象部分初始化的陷阱与应对策略
c++
有意义1 天前
深度拆解分割等和子集:一维DP数组与倒序遍历的本质
前端·算法·面试