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;
    }
};
相关推荐
稚辉君.MCA_P8_Java15 小时前
Gemini永久会员 归并排序(Merge Sort) 基于分治思想(Divide and Conquer)的高效排序算法
java·linux·算法·spring·排序算法
你的冰西瓜15 小时前
C++20 新特性详解:相较于 C++17 的主要改进
开发语言·c++·stl·c++20
止观止15 小时前
C++20 Ranges:告别手写循环,像 SQL 一样操作数据
c++·stl·c++20·编程范式·ranges
地平线开发者15 小时前
征程 6 | QAT 新版 qconfig 量化模板使用教程
算法·自动驾驶
多恩Stone15 小时前
【ModelScope-1】数据集稀疏检出(Sparse Checkout)来下载指定目录
人工智能·python·算法·aigc
山峰哥16 小时前
沉浸式翻译插件深度评测:打破语言壁垒的黑科技利器
数据结构·科技·算法·编辑器·办公
AI脚下的巨人16 小时前
机器人逆运动学:从SVD到IK算法
算法·机器人
郝学胜-神的一滴16 小时前
现代OpenGL窗口管理:GLFW从入门到实战
开发语言·c++·程序人生·图形渲染·个人开发
ゞ 正在缓冲99%…17 小时前
2025.9.28华为软开
算法·华为
Bona Sun17 小时前
单片机手搓掌上游戏机(十六)—pico运行fc模拟器之程序修改烧录
c语言·c++·单片机·游戏机