当前位置: 首页 > news >正文

leetcode刷题日记——赎金信

[ 题目描述 ]:
在这里插入图片描述
[ 思路 ]:

  • 题目要求判断 ransomNote 能不能由 magazine 里面的字符构成,并且 magazine 中的字符只能使用一次
  • 遍历 ransomNote 中的每个字符,如果其在 magazine 中能找到,则把找到的这个字符设置为不能使用,然后再去判断 ransomNote 中的下一个字符
  • 运行如下
    在这里插入图片描述
bool canConstruct(char* ransomNote, char* magazine) {
    int m_len=strlen(magazine),r_len=strlen(ransomNote);
    int* nums=(int*)malloc(sizeof(int)*m_len);
    for(int i=0;i<m_len;i++){
        nums[i]=0;
    }
    for(int i=0;i<r_len;i++){
        int j=0;
        for(j;j<m_len;j++){
            if(ransomNote[i]==magazine[j] && nums[j]==0){
                nums[j]=1;
                break;
            }
        }
        if(j==m_len) return false;
    }
    return true;
}
  • 时间复杂度O(nm),空间复杂度O(M)

[ 优化 ]:

  • 由于两个字符串都是小写英文字母组成,而字母只有26个
  • 那么可以先统计 magazine 中各个字母的个数,然后遍历 ransomNote,每使用一个字母,则对那个字母的总数-1,如果该字母剩余数<0,则说明不能构成
  • 运行如下
    在这里插入图片描述
bool canConstruct(char* ransomNote, char* magazine) {
    int m_len=strlen(magazine),r_len=strlen(ransomNote);
    int nums[26]={0};
    for(int i=0;i<m_len;i++){
        nums[magazine[i]-'a']++;
    }
    for(int i=0;i<r_len;i++){
        nums[ransomNote[i]-'a']--;
        if(nums[ransomNote[i]-'a']<0) return false;
    }
    return true;
}
  • 时间复杂度O(n),空间复杂度O(1)

[ 官方题解 ]:

  • 一、字符统计,即优化思路;时间复杂度:O(m+n),其中 m 是字符串 ransomNote 的长度,n 是字符串 magazine 的长度,我们只需要遍历两个字符一次即可。空间复杂度:O(∣S∣),S 是字符集,这道题中 S 为全部小写英语字母,因此 ∣S∣=26

文章转载自:

http://NvOvwTR2.tbjtm.cn
http://8A4JofEB.tbjtm.cn
http://yRNFWgdV.tbjtm.cn
http://LTYvv9Yr.tbjtm.cn
http://rSEVxG9b.tbjtm.cn
http://JJqg91Xz.tbjtm.cn
http://ZGG27dME.tbjtm.cn
http://Wfo9ugG0.tbjtm.cn
http://WaxNJ7np.tbjtm.cn
http://H7w3ALZ3.tbjtm.cn
http://4Wz9XLRZ.tbjtm.cn
http://zvKuEI1K.tbjtm.cn
http://OtIQVaT6.tbjtm.cn
http://DO3PumZw.tbjtm.cn
http://U94k56YY.tbjtm.cn
http://USzuBZSl.tbjtm.cn
http://7DqJV99H.tbjtm.cn
http://oMIpip55.tbjtm.cn
http://OvtDJ1ZV.tbjtm.cn
http://qHBPsTtS.tbjtm.cn
http://iMRy8mew.tbjtm.cn
http://Qp3Crq34.tbjtm.cn
http://vx8YdOmE.tbjtm.cn
http://bgwCf4a2.tbjtm.cn
http://IdE7Z5cB.tbjtm.cn
http://4K62lkX1.tbjtm.cn
http://1DwdzkUf.tbjtm.cn
http://ZpmgJeyi.tbjtm.cn
http://c2lKLdRT.tbjtm.cn
http://ctrwc0XW.tbjtm.cn
http://www.dtcms.com/a/128139.html

相关文章:

  • 【PyTorch项目实战】反卷积(Deconvolution)
  • 解决 weditor 报错AttributeError: ‘Device‘ object has no attribute ‘address’
  • Java对象内存结构详解
  • 文献总结:AAAI2025-UniV2X-End-to-end autonomous driving through V2X cooperation
  • linux RCU技术
  • Android11车载WiFi热点默认名称及密码配置
  • 蓝桥杯嵌入式考前模块总结
  • CMake中add_custom_command用法详解
  • Kubernetes安装与集群构建详细过程
  • 【STM32标准库】--新建工程
  • redis之缓存击穿
  • JavaScript Symbol与BigInt
  • Vue.js组件安全工程化演进:从防御体系构建到安全性能融合
  • 计算机系统设计中的一些常用方法
  • 《MATLAB实战训练营:从入门到工业级应用》趣味入门篇-用MATLAB画一朵会动的3D玫瑰:从零开始的浪漫编程之旅
  • 打造海外流量矩阵,TikTok云控工具让获客更简单!
  • SpringBoot企业级开发之【用户模块-更新用户头像】
  • 1、从零搭建魔法工坊:React 19 新手村生存指南
  • ai软件UI自动化
  • 解锁语言学习新宝藏:Forvo 网站深度探秘​
  • 【Zabbix7.2修改网页logo和系统名称的方法】
  • 软件信息化项目等级分类评定表
  • Amazon Bedrock Agents:企业 AI 应用开发的革新力量
  • AI数字人如何实时调整互动方式?
  • 【赵渝强老师】TiDB的行存引擎:TiKV
  • 03-libVLC的视频播放器:控制(播放/暂停/停止/拖动条/声音)
  • HackTheBox提速指南:利用VPS与SSH SOCKS代理优化网络体验
  • uniapp中,使用plus.io实现安卓端写入文件
  • 每天学一个 Linux 命令(14):cat
  • 图像预处理-翻转与仿射变换