我在试用hackerrank时遇到了一个问题,我试图用python3解决这个问题。 问题是 一个绑匪写了一张赎金纸条,但担心会被追查到他。他找到了一本杂志,想知道他是否能从中删去整段文字,并用它们来制作一份无法追踪的赎金纸条复制品。他笔记中的单词是区分大小写的,他必须使用杂志上提供的所有单词,这意味着他不能使用子字符串或串联来创建他需要的单词。你知道吗
根据杂志上的文字和赎金通知单上的文字,如果他能准确地使用杂志上的全部文字复制赎金通知单,则打印“是”;否则,打印“否”
我试着用下面的方法
def ransom_note(magazine, ransom):
# comparing based on the number of times word occurred in the list
for word in set(ransom):
if ransom.count(word) > magazine.count(word):
return False
return True
这确实奏效了,我在20个测试用例中选对了18个。 但是另外两个案子已经过时了,所以我必须找到一个成本效益最好的方法。 我试着把这些单词作为字典来存储,用单词作为关键字,用单词的个数作为值。仍然没有得到这两个案例,当我查看这些案例时,输入和输出都有30000个字,预期是“是”。你知道吗
我看到了讨论的页面,找到了一段让我通过的代码。你知道吗
from collections import Counter
def ransom_note(magazine, ransom):
return not (Counter(ransom) - Counter(magazine))
有人能解释为什么这比我的方法更有效吗? 提前感谢:)
据我所知,在您第二次尝试这个问题时,
ransom
和magazine
都是字典,因此理论上您的代码是尽可能快的。你知道吗PythonCounter集合是专门为处理简单整数计数而设计的,并且经过优化,可以非常快速地执行常见操作。事实证明,查看一个列表中是否有足够的内容来满足另一个列表的请求是一个非常常见的操作。所以他们花时间优化
Counter
很快就完成了这个操作。你知道吗相关问题 更多 >
编程相关推荐