用c++代码写KMP算法
时间: 2023-11-10 17:07:30 浏览: 84
kmp.rar_kmp算法伪代码
以下是使用C语言实现KMP算法的示例代码:
```c
#include <stdio.h>
#include <string.h>
void kmp(char *text, char *pattern) {
int n = strlen(text);
int m = strlen(pattern);
int i = 0, j = 0;
int *lps = (int*) malloc(m * sizeof(int));
// 生成最长前缀后缀数组
while (i < m) {
if (pattern[i] == pattern[j]) {
lps[i] = j + 1;
i++;
j++;
} else {
if (j != 0) {
j = lps[j-1];
} else {
lps[i] = 0;
i++;
}
}
}
// 在文本串中查找模式串
i = 0, j = 0;
while (i < n) {
if (text[i] == pattern[j]) {
i++;
j++;
}
if (j == m) {
printf("匹配成功,起始位置为%d\n", i - j);
j = lps[j-1];
} else if (i < n && text[i] != pattern[j]) {
if (j != 0) {
j = lps[j-1];
} else {
i++;
}
}
}
free(lps);
}
int main() {
char text[] = "ababcabcabababd";
char pattern[] = "ababd";
kmp(text, pattern);
return 0;
}
```
注释中解释了每个部分的作用。该代码中的kmp函数接受两个参数:文本串和模式串,然后输出模式串在文本串中的所有匹配位置。该算法的时间复杂度为O(n+m)。
阅读全文