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)