LeetCode——赎金信
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——赎金信相关推荐
- LeetCode赎金信
目录 赎金信 大致思路 总结 赎金信 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成. 如果可以,返回 true ...
- LeetCode 赎金信
给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成.如果可以构成,返回 true :否则返回 ...
- leetcode 383. 赎金信 思考分析
题目 给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成.如果可以构成,返回 tru ...
- 代码随想录算法训练营第07天 | LeetCode 454.四数相加2,383. 赎金信,15. 三数之和,18. 四数之和,总结
LeetCode [454. 四数相加 II] 题目:给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足 ...
- Leetcode 383 赎金信
给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成.如果可以构成,返回 true : ...
- leetcode系列-383.赎金信
leetcode系列–第383题.赎金信 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成.如果可以,返回 true ...
- LeetCode.383. 赎金信
LeetCode.383. 赎金信 难度:easy 利用数组来做哈希表,分别统计两个字符串中各个字母的出现次数: class Solution {public boolean canConstruct ...
- 【leetcode 简单】 第八十九题 赎金信
给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成.如果可以构成,返回 true :否则返回 ...
- LeetCode 383. 赎金信
383. 赎金信 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成. 如果可以,返回 true :否则返回 fals ...
最新文章
- SIFT和SURF的替换算法——ORB (Oriented FAST and Rotated BRIEF 快速定向和旋转)
- PHP下使用FPDF在PDF中插入图片
- 枚举方式的线程安全的单例
- BZOJ3160: 万径人踪灭
- 设计模式--依然创建者
- Problem - 3936 FIB Query
- mysql锁机制(Innodb引擎)
- 北邮dsp matlab实验,北京邮电大学《数字信号处理》门爱东-DSP实验.pdf
- 『操作系统』 进程的描述与控制 Part4 线程
- 【QMIX】一种基于Value-Based多智能体算法
- [CareerCup] 9.6 Generate Parentheses 生成括号
- posman使用教程
- RocketMQ 源码学习笔记 Producer 是怎么将消息发送至 Broker 的?
- 关于“WARN: SQL Error: 1366, SQLState: HY000”错误的解决方案
- 类似%-30的字串解码办法
- 51nod 1051 最大子矩阵和 【最大子段和DP变形/降维】
- 火狐浏览器书签不同步问题
- 浏览器网页自动刷新脚本
- MT【99】2005联赛二试题我的一行解法
- 轻轻松松背单词软件测试,完美单词王app