分享

​LeetCode刷题实战383:赎金信

 程序IT圈 2021-09-17
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 赎金信,我们先来看题面:
https:///problems/ransom-note/

Given two stings ransomNote and magazine, return true if ransomNote can be constructed from magazine and false otherwise. 

Each letter in magazine can only be used once in ransomNote.

给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false。
(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。杂志字符串中的每个字符只能在赎金信字符串中使用一次。)

示例

示例 1
输入:ransomNote = "a", magazine = "b"
输出:false

示例 2
输入:ransomNote = "aa", magazine = "ab"
输出:false

示例 3
输入:ransomNote = "aa", magazine = "aab"
输出:true

解题

对magazines中的字符进行遍历,相同字母个数加一写进字典,再对ransom中的字符进行遍历,依次减1  如果出现不在字典中的字母或者有字母个数出现-1,则返回false ,否则,返回true 。

class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        a = {}
        for i in magazine:
            if i not in a:
                a[i] = 1
            else:
                a[i] += 1
        for j in ransomNote:
            if j not in a:
                return False
            else:
                a[j] -= 1
            if a[j] < 0:
                return False
        return True


好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。

上期推文:

LeetCode1-380题汇总,希望对你有点帮助!
LeetCode刷题实战381:O(1) 时间插入、删除和获取随机元素
LeetCode刷题实战382:链表随机节点

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多