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;
    }
};
相关推荐
祁同伟.6 分钟前
【C++】异常
开发语言·c++
第七序章22 分钟前
【C + +】红黑树:全面剖析与深度学习
c语言·开发语言·数据结构·c++·人工智能
夜晚中的人海26 分钟前
【C++】滑动窗口算法习题
开发语言·c++·算法
AA陈超1 小时前
虚幻引擎5 GAS开发俯视角RPG游戏 P06-09 玩家等级与战斗接口
c++·游戏·ue5·游戏引擎·虚幻
violet-lz1 小时前
数据结构四大简单排序算法详解:直接插入排序、选择排序、基数排序和冒泡排序
数据结构·算法·排序算法
·白小白1 小时前
力扣(LeetCode) ——118.杨辉三角(C++)
c++·算法·leetcode
tongsound1 小时前
libmodbus 使用示例
linux·c++
sulikey2 小时前
C++的STL:深入理解 C++ 的 std::initializer_list
开发语言·c++·stl·list·initializerlist·c++标准库
CoovallyAIHub2 小时前
超越“识别”:下一代机器视觉如何破解具身智能落地难题?
深度学习·算法·计算机视觉
代大大2 小时前
sciter.js 之cpp使用教程(1)
c++·前端框架