13KMP

  • 最长前后缀相同表:

Snipaste_2021-11-10_11-30-04

匹配:Snipaste_2021-11-10_11-32-03

当前没有匹配上的位置对应的前缀表对应的数为1,把P位置为1的位置拉带现在没有匹配成功的位置,然后继续匹配:

Snipaste_2021-11-10_11-35-22

当前没有匹配上的位置对应的前缀表对应的数为0,把P位置为0的位置拉带现在没有匹配成功的位置,然后继续匹配:

Snipaste_2021-11-10_11-36-43

当前没有匹配上的位置对应的前缀表对应的数为0,把P位置为0的位置拉带现在没有匹配成功的位置,然后继续匹配:

Snipaste_2021-11-10_11-37-28

Snipaste_2021-11-10_11-38-04

当前没有匹配上的位置对应的前缀表对应的数为-1,把P位置为-1的位置拉带现在没有匹配成功的位置,然后继续匹配:

Snipaste_2021-11-10_11-39-02

Snipaste_2021-11-10_11-39-42

如果已经匹配一组成功还想继续找,就把位置为2的元素对应移动:

Snipaste_2021-11-10_14-00-43

代码实现:

分析求出最长公共前后缀表:

Snipaste_2021-11-10_14-15-58

如果index=5是对应的prefix=1,只需要检测第一个字母后面的字母与第6个想不想等就行:

Snipaste_2021-11-10_14-17-45

posted @ 2021-11-21 16:41  zjh1170  阅读(30)  评论(0)    收藏  举报