给出C语言 KMP算法代码
时间: 2023-09-09 10:12:03 浏览: 97
以下是C语言实现的KMP算法代码:
```
void getNext(char* p, int* next) {
int len = strlen(p);
next[0] = -1;
int j = -1;
for (int i = 1; i < len; i++) {
while (j >= 0 && p[i] != p[j + 1]) {
j = next[j];
}
if (p[i] == p[j + 1]) {
j++;
}
next[i] = j;
}
}
int kmp(char* s, char* p) {
int n = strlen(s), m = strlen(p);
if (m == 0) {
return 0;
}
int* next = (int*)malloc(sizeof(int) * m);
getNext(p, next);
int j = -1;
for (int i = 0; i < n; i++) {
while (j >= 0 && s[i] != p[j + 1]) {
j = next[j];
}
if (s[i] == p[j + 1]) {
j++;
}
if (j == m - 1) {
free(next);
return i - j;
}
}
free(next);
return -1;
}
```
以上就是实现KMP算法的C语言代码。
阅读全文