LeetCode——赎金信

题目描述:
给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false。

(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。杂志字符串中的每个字符只能在赎金信字符串中使用一次。)

示例 1:

输入:ransomNote = “a”, magazine = “b”
输出:false
示例 2:

输入:ransomNote = “aa”, magazine = “ab”
输出:false
示例 3:

输入:ransomNote = “aa”, magazine = “aab”
输出:true

提示:

你可以假设两个字符串均只含有小写字母。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ransom-note
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

解法一:
我先将magazine转换成一个列表便于操作。
然后遍历ransomNote中的每个字符,查看其是否在magazine中,如果在的话,删除magazine中的这个元素并继续循环(因为magazine中每一个字符只能在ransomNote中使用一次)。
如果碰到字符不在magazine中时,就返回False。
循环结束返回True。

解法二:
首先我们判断ransomNote的长度是否大于magazine,如果是则必定返回False。

然后,我们将两个字符串按从小到大的顺序排列好;

定义两个指针i,j,分别指向两个字符串的起始位置;开始循环:

如果两个指针指向的字符匹配,则两个字符同时向前移动一格;
如果指向ransomNote的指针指向的字符更大,则让j指针向前移动一格;
如果i指向的字符更小,则说明j指针之后的所有字符都无法与其匹配(因为两个字符串已经排序好了),这个时候就说明不匹配,返回False。

循环结束后我们还需要判断:ransomNote是否遍历完毕?如果ransomNote还有没遍历到的元素,说明magazine遍历完后ransomNote还有剩余元素,这些元素无法匹配,因此返回False。

最后返回True。

解法一python代码:

class Solution(object):def canConstruct(self, ransomNote, magazine):""":type ransomNote: str:type magazine: str:rtype: bool"""m_list = list(magazine)for r in ransomNote:if r in m_list:m_list.remove(r)else:return Falsereturn True

解法二python代码:

class Solution(object):def canConstruct(self, ransomNote, magazine):""":type ransomNote: str:type magazine: str:rtype: bool"""if len(ransomNote) > len(magazine):return FalseransomNote = sorted(ransomNote)magazine = sorted(magazine)i, j = 0, 0while i < len(ransomNote) and j < len(magazine):if ransomNote[i] == magazine[j]:i += 1j += 1elif ransomNote[i] > magazine[j]:j += 1else:return Falseif i != len(ransomNote):return Falsereturn True

LeetCode——赎金信相关推荐

  1. LeetCode赎金信

    目录 赎金信 大致思路 总结 赎金信 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成. 如果可以,返回 true ...

  2. LeetCode 赎金信

    给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成.如果可以构成,返回 true :否则返回 ...

  3. leetcode 383. 赎金信 思考分析

    题目 给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成.如果可以构成,返回 tru ...

  4. 代码随想录算法训练营第07天 | LeetCode 454.四数相加2,383. 赎金信,15. 三数之和,18. 四数之和,总结

    LeetCode [454. 四数相加 II] 题目:给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足 ...

  5. Leetcode 383 赎金信

    给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成.如果可以构成,返回 true : ...

  6. leetcode系列-383.赎金信

    leetcode系列–第383题.赎金信 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成.如果可以,返回 true ...

  7. LeetCode.383. 赎金信

    LeetCode.383. 赎金信 难度:easy 利用数组来做哈希表,分别统计两个字符串中各个字母的出现次数: class Solution {public boolean canConstruct ...

  8. 【leetcode 简单】 第八十九题 赎金信

    给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成.如果可以构成,返回 true :否则返回 ...

  9. LeetCode 383. 赎金信

    383. 赎金信 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成. 如果可以,返回 true :否则返回 fals ...

最新文章

  1. SIFT和SURF的替换算法——ORB (Oriented FAST and Rotated BRIEF 快速定向和旋转)
  2. PHP下使用FPDF在PDF中插入图片
  3. 枚举方式的线程安全的单例
  4. BZOJ3160: 万径人踪灭
  5. 设计模式--依然创建者
  6. Problem - 3936 FIB Query
  7. mysql锁机制(Innodb引擎)
  8. 北邮dsp matlab实验,北京邮电大学《数字信号处理》门爱东-DSP实验.pdf
  9. 『操作系统』 进程的描述与控制 Part4 线程
  10. 【QMIX】一种基于Value-Based多智能体算法
  11. [CareerCup] 9.6 Generate Parentheses 生成括号
  12. posman使用教程
  13. RocketMQ 源码学习笔记 Producer 是怎么将消息发送至 Broker 的?
  14. 关于“WARN: SQL Error: 1366, SQLState: HY000”错误的解决方案
  15. 类似%-30的字串解码办法
  16. 51nod 1051 最大子矩阵和 【最大子段和DP变形/降维】
  17. 火狐浏览器书签不同步问题
  18. 浏览器网页自动刷新脚本
  19. MT【99】2005联赛二试题我的一行解法
  20. 轻轻松松背单词软件测试,完美单词王app

热门文章

  1. 【转】个人总结-网络安全学习和CTF必不可少的一些网站
  2. 大坝安全监测设施 水库雨水情大坝安全监测设施
  3. xBIM 格式之间转换
  4. 外汇占款激增究竟是谁惹的祸
  5. 修改文章的软件-有没有自动修改文章的软件
  6. 对张子阳先生对委托和事件的两篇文章的读后思考(说得很透,内附故事一篇)...
  7. Android O版本 应用锁功能
  8. oracle 计算年累计,ORACLE计算累计和
  9. 浅谈BTTZ矿物绝缘电缆的抗火灾能力
  10. JAVA中的高并发,解决高并发的方案