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;
    }
};
相关推荐
机器视觉知识推荐、就业指导16 分钟前
C++设计模式:桥接模式(Bridge)
c++·设计模式·桥接模式
wenyue112123 分钟前
以有效安全的方式在正式生产环境中模拟真实流量进行全站点性能测试
后端·算法·架构·压力测试
Peter_chq27 分钟前
【计算机网络】多路转接之epoll
linux·服务器·c语言·网络·c++·后端·epoll
请你打开电视看看1 小时前
创建型模式-建造者模式
java·算法·建造者模式
浪前2 小时前
排序算法之选择排序篇
java·算法·排序算法
ኈ ቼ ዽ2 小时前
python简单算法
开发语言·python·算法
Jam-Young2 小时前
Python的排序算法
python·算法·排序算法
bbqz0072 小时前
逆向WeChat(八)
c++·微信·逆向·日志·mars·xlog·日志破解·日志加密·日志解密
今晚打老虎2 小时前
c++(斗罗大陆)
开发语言·c++·游戏程序
北京理工大学软件工程3 小时前
C++-qt经验
开发语言·c++