void getNext(string s, int *next)
{
int n = s.length(), i = 0, j = -1;
next[0] = -1;
while (i < n-1)
{
if (j == -1 || s[i] == s[j])
next[++i] = ++j;
else
j = next[j];
}
}
int kmp(string s, string t)
{
int n1 = s.length(), n2 = t.length(), i = 0, j = 0;
int *next = new int[n2];
getNext(t, next);
while (i<n1&&j<n2)
{
if (j == -1 || s[i] == t[j])
{
i++;
j++;
}
else
j = next[j];
}
return j == n2 ? i - j : -1;
}KMP模式匹配算法C++实现
最新推荐文章于 2022-10-17 22:18:24 发布
本文深入讲解了KMP算法的工作原理及其实现过程。通过两个核心函数:getNext()用于生成部分匹配表,kmp()用于执行字符串匹配,展示了如何高效地在主串中查找模式串。该文适合对字符串搜索算法感兴趣的读者。
1087

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



