[LeetCode]383. Ransom Note

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.

Example 1:

Input: ransomNote = “a”, magazine = “b”
Output: false
Example 2:

Input: ransomNote = “aa”, magazine = “ab”
Output: false
Example 3:

Input: ransomNote = “aa”, magazine = “aab”
Output: true

坑1:
理解错误,以为magazine中必须含有和ransomNote中长度顺序一样的部分。看了测试cases发现,无需顺序一样。所以一开始想复杂了,思路如下:
When return true?
The magazine have string Y which is same as ransomNote.
so the len(Y) = len(ransomNote)

if Y == ransomNote:
return true

What is Y?
I try to get Y from magazine by magazine[0:len(ransomNote)].
After each time compare Y with ransomNote, I need to move the first element from magazine.

magazine = magazine[1:]

class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        if ransomNote + magazine == "": return True
        else:
            for i in magazine:
                cut_list = magazine[0:len(ransomNote)]
                print(ransomNote,cut_list)
                if ransomNote == cut_list:
                    return True     
                magazine = magazine[1:]
                
             

坑2:
I got the error " NameError: name ‘true’ is not defined".
Because in the question always use “true” of “false” as the result, I use “return true” rather than “return True” when I was coding.

So!!!!!This question is verrrrrrrrry easy!!! I throught toooo much…

Right answer:

class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
           for i in ransomNote:
               if i in magazine:
                   magazine = magazine.replace(i,"",1)
               else:
                   return False
           return True
                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值