在浏览了不同的博客/ SO问题后仍未找到答案来发布此问题
我正在尝试围绕leetcode竞赛使用的解决方案/算法。
这是问题:
给定两个字符串A和B,找出必须重复的最小次数,以使B是它的子字符串。如果没有这样的解决方案,则返回-1。
例如,使用A =“ abcd”和B =“ cdabcdab”。
返回3,因为重复三遍A(“ abcdabcdabcd”),B是它的子字符串;并且B不是重复两次的A的子字符串(“ abcdabcd”)。
我知道滚动哈希方法是首选方法,但我决定从博耶·摩尔方法开始。
经过研究,我发现以下代码在幕后使用了Boyer Moore算法。这是代码:
def repeatedStringMatch(self, A, B):
"""
:type A: str
:type B: str
:rtype: int
"""
m = math.ceil(len(B)/len(A))
if B in A * m:
return m
elif B in A * (m + 1):
return m + 1
else:
return -1
基于对算法的理解,我不相信上面的解决方案可能会使用BM方法。
我具体不清楚这条线是什么
m = math.ceil(len(B)/len(A))
以及为什么我们必须以这种方式找到m。有人可以在这里帮我吗?
守候你守候我
相关分类