KMP算法

Posted bounce

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KMP算法相关的知识,希望对你有一定的参考价值。

题目:

两行字符串,求第一行字符串在第二行中出现的次数。

 

KMP算法的关键是NEXT的数组。

初始设置NEXT[0]=-1;

循环:设置NEXT的数组。

初始时NEXT[0]=-1;

if(pattern[i]==pattern[j]) 则同时设置next[++i]=++j;

否则的话:j=next[j] 

  while(i<len)
        {
            if(j==-1 || pattern[i]==pattern[j])
                NEXT[++i]=++j;
            else
                j=NEXT[j];
        }

同时对pre进行,算法就是相匹配,如果出现了不匹配的那以为,则q=next[q],q是相对于pattern串而言。最后输入ans.

while(i<len)
        {
            if(j==-1 || pre[i]==pattern[j])
            {
                ++i;++j;
            }
            else
            {
                j=NEXT[j];
            }
            if(j==n) ans++;
       }

以上是关于KMP算法的主要内容,如果未能解决你的问题,请参考以下文章

数据结构—串KMP模式匹配算法

Python ---- KMP(博文推荐+代码)

KMP算法及Python代码

KMP算法及Python代码

图解KMP算法原理及其代码分析

Kmp算法Java代码实现