【问题标题】:Naive implementation of Karp-Rabin pattern matching algorithmKarp-Rabin 模式匹配算法的朴素实现
【发布时间】:2018-03-07 22:04:44
【问题描述】:

我在实现 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的偏移量。

感谢您的帮助。

【问题讨论】:

    标签: python rabin-karp


    【解决方案1】:

    您需要break 而不是continue。 Continue 将继续进行内循环的下一次迭代,而break 将退出内循环。此外,您不会通过使用 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。如果您希望它是零索引,应该很容易更新!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-09
      • 2021-03-02
      • 2018-04-09
      • 2012-01-18
      • 2011-05-20
      • 2022-08-19
      • 2022-01-10
      • 1970-01-01
      相关资源
      最近更新 更多