1

我在实施Karp-Rabin模式行军的幼稚版本时遇到问题;我没有得到预期的结果。这是我的例子;

string='today is a good day'
sub='good'

我想在上面的字符串中找到好的模式。

def kapr(n,m):
    for i in range(len(n)-len(m)+1):
        for j in range(len(m)):
            if n[i+j-1]!=m[j]:
                continue
        return i
    return not found

Print (kapr(string, sub)) 

输出=0 预期输出=11,应与字符串中good的偏移量相对应。

谢谢你的帮助。

4

1 回答 1

1

你想要break而不是continue. Continue 将继续进行内循环的下一次迭代,whilebreak将退出内循环。此外,您不会通过使用 break 直接跳到外循环的下一次迭代,因此您将点击return i语句。要阻止这种情况发生,您可以使用for/else分支。

例如

for j in range(len(m)):
    if n[i+j-1]!=m[j]:
        break
else:
    return i

只有return i当内部循环正常完成时才会这样做。

它返回的索引也不是零索引,因此通过上述修改,它将返回 12。如果您希望它是零索引,应该很容易更新!

于 2017-09-26T15:54:24.027 回答