帮我用c++编写kmp算法
时间: 2024-05-05 12:19:13 浏览: 12
好的, 我可以为您编写 KMP 算法。 KMP 算法是一种字符串匹配算法,用于在一个文本串 S 内查找一个模式串 P 的出现位置。以下是用 C 语言编写的 KMP 算法代码:
```
#include <stdio.h>
#include <string.h>
void compute_lps_array(char* pat, int M, int* lps);
void kmp_search(char* pat, char* txt)
{
int M = strlen(pat);
int N = strlen(txt);
int lps[M];
compute_lps_array(pat, M, lps);
int i = 0; // txt 中的游标
int j = 0; // pat 中的游标
while (i < N) {
if (pat[j] == txt[i]) {
j++;
i++;
}
if (j == M) {
printf("Pattern found at index %d\n", i - j);
j = lps[j - 1];
}
else if (i < N && pat[j] != txt[i]) {
if (j != 0)
j = lps[j - 1];
else
i++;
}
}
}
void compute_lps_array(char* pat, int M, int* lps)
{
int len = 0;
lps[0] = 0;
int i = 1;
while (i < M) {
if (pat[i] == pat[len]) {
len++;
lps[i] = len;
i++;
}
else {
if (len != 0) {
len = lps[len - 1];
}
else {
lps[i] = 0;
i++;
}
}
}
}
```
在上面的代码中,kmp_search() 函数使用 KMP 算法查找模式串在文本中的出现位置。 compute_lps_array() 函数用于计算模式串的最长前缀后缀数组 lps[]。 最终,如果找到了模式,程序将打印出模式的起始索引。
请注意,这只是 KMP 算法的一个简单实现,并且它不是最优的。 有更好的算法实现可以用在生产环境中。