#include <iostream>
using namespace std;
const int MAXSIZE = 10;
struct SqString
{
char data[MAXSIZE];
int length;
};
void Getnext(SqString sq,int *next)
{
int i,j;
i = 0,j = -1;
next[0] = -1;
while(i < sq.length)
{
if(j == -1 || sq.data[i] == sq.data[j])
next[++i] = ++j;
else
j = next[j];
}
}
int KMPindex(SqString s1,SqString s2)
{
int next[MAXSIZE];
int i,j;
i = 0;j = 0;
Getnext(s2,next);
while (i < s1.length && j < s2.length)
{
if(j == -1 || s1.data[i] == s2.data[j])
{
i++;
j++;
}
else
j = next[j];
}
if(j >= s2.length)
return(i - s2.length);
else
return -1;
}
int main()
{
SqString s1 = {"abacdab",7};
SqString s2 = {"cd",2};
cout << KMPindex(s1,s2);
return 0;
}
KMP算法
最新推荐文章于 2024-10-01 23:05:47 发布