zoukankan      html  css  js  c++  java
  • 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.

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

    canConstruct("a", "b") -> false
    canConstruct("aa", "ab") -> false
    canConstruct("aa", "aab") -> true
    
    class Solution(object):
        def canConstruct(self, ransomNote, magazine):
            """
            :type ransomNote: str
            :type magazine: str
            :rtype: bool
            """
            # hash cnt
            # sort merge
            s = collections.Counter(magazine)
            for c in ransomNote:
                if c in s and s[c]>0:
                    s[c] -= 1
                else:
                    return False
            return True

    排序,类似归并思路

    class Solution(object):
        def canConstruct(self, ransomNote, magazine):
            """
            :type ransomNote: str
            :type magazine: str
            :rtype: bool
            """
            # hash cnt
            # sort merge
            r = sorted(ransomNote)
            m = sorted(magazine)
            i = j = 0
            while i<len(r) and j<len(m):
                if r[i] == m[j]:
                    i += 1
                    j += 1
                else:
                    j += 1
            return i==len(r)
  • 相关阅读:
    [算法] 带权图
    哥德巴赫猜想 ——— 极限算法(你要是能写出比我用时还短的代码算我输)
    详解 位运算
    内存对齐模式 —— 原理讲解
    C语言 文件操作
    指针与数组
    队列的实现
    堆栈的实现
    线性表 详讲及使用
    树莓派
  • 原文地址:https://www.cnblogs.com/bonelee/p/8660729.html
Copyright © 2011-2022 走看看