字串个数
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;
}
原文:https://www.cnblogs.com/Kiana-/p/12263608.html