#include <iostream>
using namespace std;
void getnextval(char T[], int lengtht, int *nextval) {
int i = 1;
int j = 0;
nextval[i-1] = 0;
while(i < lengtht) {
if(T[i-1] == T[j-1] || j == 0) {
i ++;
j ++;
if(T[i-1] != T[j-1]) nextval[i-1] = j;
else nextval[i-1] = nextval[j-1];
}
else j = nextval[j-1];
}
}
int KMP(char S[], int lengths, char T[], int lengtht) {
int *nextval;
nextval = new int[lengtht];
getnextval(T, lengtht, nextval);
for(int i = 0; i < lengtht; i ++) {
cout << *(nextval + i) << " ";
}
cout << endl;
int i = 1;
int j = 1;
while(i <= lengths && j <= lengtht) {
if(j == 0 || S[i-1] == T[j-1]) {
i ++;
j ++;
}
else {
j = nextval[j-1];
}
}
if(j > lengtht) return i - lengtht;
else return -1;
}
int main() {
char S[] = "abagooglegg";
char T[] = "google";
int res = KMP(S, 11, T, 6);
cout << res;
cout << endl;
return 0;
}
数据结构优化的KMP算法C语言
最新推荐文章于 2025-01-17 23:34:29 发布
1048

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



