题目描述:

Given an arbitrary ransom note string and another string containing letters from all the magazines, write a function that will return true if the ransom note can be constructed from the magazines ; otherwise, it will return false.

Each letter in the magazine string can only be used once in your ransom note.

Note:
You may assume that both strings contain only lowercase letters.

canConstruct("a", "b") -> false
canConstruct("aa", "ab") -> false
canConstruct("aa", "aab") -> true 

要完成的函数:

bool canConstruct(string ransomNote, string magazine)

说明:

1、古时候……绑架者会写勒索信,要求给赎金,不然就撕票。但为了不被认出自己的字迹,就会从报纸上剪出文字,拼凑成一封勒索信。这道题给定两个字符串,第一个是绑匪要写的勒索信的字符串,第二个是报纸上能提供的文字的字符串,要求判断能不能从第二个字符串中构建出第一个字符串。

第二个字符串中的每个字母只能用一次,两个字符串中只有小写字母。

2、这道题有三种做法:

①双重循环,第一个字符串碰到一个字符就去找第二个字符串中有没有,这是最慢最没有效率的做法。

②先排序,再比较,这种做法时间复杂度比①小,但也不快。

③以空间换时间,定义一个长度为26的vector,遍历一遍第二个字符串,统计所有字母的出现次数,再遍历一遍第一个字符串,逐个在vector中相应位置上减1。

最后再遍历一遍vector,看是否存在小于0的数值,如果有,返回false。如果没有,返回true。

时间复杂度是O(n)

我们采用第三种做法,构造代码如下:

    bool canConstruct(string ransomNote, string magazine) {   vector<int>count(26,0);for(char i:magazine)//统计第二个字符串中所有的字母出现次数count[i-'a']++;for(char i:ransomNote)//在对应的位置上减去1count[i-'a']--;for(int i:count)//遍历一遍vector,看是否存在小于0的数值{if(i<0)return false;}return true;}

上述代码实测24ms,beats 89.66% of cpp submissions。

转载于:https://www.cnblogs.com/chenjx85/p/9125327.html

leetcode-383-Ransom Note(以空间换时间)相关推荐

  1. Leetcode 383 Ransom Note

    lc383 Ransom Note 两个for 第一个记录sourse字符串每种字母出现次数 第二个看现有字母是否能够填满target 1 class Solution { 2 public bool ...

  2. LeetCode 383. Ransom Note

    题目 : Given an arbitrary ransom note string and another string containing letters from all the magazi ...

  3. leetcode 383. Ransom Note(赎金票据)

    Given two strings ransomNote and magazine, return true if ransomNote can be constructed by using the ...

  4. [hashmap|空间换时间] leetcode 1 两数之和

    [hashmap|空间换时间] leetcode 1 两数之和 1.题目 题目链接 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下 ...

  5. FPGA之道(62)时空变换之空间换时间

    文章目录 前言 时空变换之空间换时间 缓存提速使用 模块复制 同频模块复制 缓存降频复制 缓存降频使用 逻辑拆分 流水线 流水线的由来 如何在组合逻辑中使用流水线 如何在时序逻辑中使用流水线 顺序系统 ...

  6. 前端遍历导致查询数据时间过长_OLAP 服务器,空间换时间可行吗?

    [摘要] 全量预汇总真的是提高 OLAP 性能的可行方案吗?点击了解OLAP 服务器,空间换时间可行吗? 多维分析提供拖拽.旋转.切片.钻取等等人机交互操作,必须有秒级的响应速度.而这些操作对应的明细 ...

  7. 空间换时间,查表法的经典例子

    前言 上一篇分享了:C语言精华知识:表驱动法编程实践 这一篇再分享一个查表法经典的例子. 我们怎么衡量一个函数/代码块/算法的优劣呢?这需要从多个角度看待.本篇笔记我们先不考虑代码可读性.规范性.可移 ...

  8. ie浏览器查看vue中js_浅析 Vue.js 中那些空间换时间的操作

    Hello,各位小伙伴,接下来的一段时间里,我会把我的课程<Vue.js 3.0 核心源码解析>中问题的答案陆续在我的公众号发布,由于课程的问题大多数都是开放性的问题,所以我的答案也不一定 ...

  9. 空间换时间--程序策略

    这几天修改一个去年做的程序,因为程序使用了xml保存的一些数据,整个xml文件结构欠佳,所以每次都需要对数据进行读取运算重新组合才能使用. 朋友需要这个程序多加点功能,于是顺便把这个去年做的不太好的地 ...

最新文章

  1. Nginx使用服务信号升级
  2. python 完全面向对象_Python面向对象
  3. BFS,优先队列优化
  4. Basic Calculator II
  5. 读《python核心编程2》笔记 1
  6. 《图解机器学习-杉山将著》读书笔记---CH5
  7. SparkStreaming与kafka的结合
  8. WebSocket,不再“轮询”
  9. python绘制贝塞尔曲线_贝塞尔曲线数学原理及Python实现
  10. 焊接工时简便计算工具_焊接工时定额计算手册.doc
  11. Nexus max file descriptors
  12. 父亲节python代码半个心_2019父亲节活动方案,暖心来袭!
  13. VMwareESX常用命令和IP地址修改
  14. 字节、快手、天弘基金等 :量化/算法工程师岗位【社招|校招|实习生】
  15. Tmux 常用快捷键
  16. Tracup|10个有效的工作习惯,成功的例子和技巧
  17. 计算机软考网络管理员题,计算机软考网络管理员理论练习题及答案(5)
  18. 《超算竞赛导引》阅读笔记
  19. 2006年世界杯——巴西队最后一次世界冠军
  20. 网络收集自我检测题库

热门文章

  1. 20189218 2018-2019-2 《密码与安全新技术专题》第9周作业
  2. LeetCode 之 JavaScript 解答第20题 —— 有效的括号(Valid Parentheses)
  3. 第十四届华中科技大学程序设计竞赛 B Beautiful Trees Cutting【组合数学/费马小定理求逆元/快速幂】...
  4. Windows 10下安装scrapy(pip方式,非wheel)
  5. 【资源共享】《Rockchip 量产烧录 指南 V1.0》
  6. 计算机组成原理学习笔记(一)
  7. 两种 js下载文件的方法(转)
  8. Android网络之数据解析----SAX方式解析XML数据
  9. 反对网抄,没有规则可以创建目标install 靠谱解答
  10. FLEX中Sequence实例教程. 顺序执行的效果.