模式串有特征,可以利用这种特征 把前面的匹配结果直接拿来用。
int kmpSearch(char *s,char *p,int next[])
{int i=0;
int j=0;
int sLen=strlen(s);
int pLen=strlen(p);
while(i<sLen&&j<pLen)
{
if(j==-1||s[i]==p[j])
{
i++;
j++;
}
else
{
j=next[j];
}
}
if(j==pLen)
return i-j;
else
return -1;
}
void getNext(char *p,int next[])
{
int pLen=strlen(p);
next[0]=-1;
int k=-1;
int j=0;
while(j<pLen-1)
{
if(k==-1||p[j]==p[k])
{
k++;
j++;
next[j]=k;
}
else
k=next[k];
}
}
模式匹配算法详解:KMP搜索实现
本文深入探讨了KMP(Knuth-Morris-Pratt)算法,一种高效的字符串匹配方法。通过实例演示了如何利用模式串的特征进行快速定位匹配结果,避免了传统方法中的重复比较。详细解释了`getNext`函数生成next数组的过程,以及`intkmpSearch`函数如何利用该数组进行高效搜索。本教程旨在帮助开发者理解和实现这一经典算法。
9万+

被折叠的 条评论
为什么被折叠?



