首页 > 其他 > 详细

KMP

时间:2020-02-05 15:32:45      阅读:62      评论:0      收藏:0      [点我收藏+]

 

 

 

 

 

 

 

 

 

 

 

字串个数

void getnex()//获取next数组

{

int len2 = strlen(s2);

nex[0] = { -1 };
int k = -1;
int j = 0;
while (j < len2 )
{
if (k == -1 || s2[j] == s2[k])
{
++k;
++j;
nex[j] = k;//最长前缀后缀公共元素
}
else
{
k = nex[k];
}
}
}

int kmp()//字符串匹配
{
int i = 0, j = 0;
int len1 = strlen(s1);
int len2 = strlen(s2);
int ans = 0;
while (i < len1)
{
if (j == -1 || s1[i] == s2[j])
{

i++;
j++;
if (j == len2 )//找到一次子串
ans++;
}
else
{
j = nex[j];//子串向右退
}
}
return ans;
}

KMP

原文:https://www.cnblogs.com/Kiana-/p/12263608.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!