生成一段kmp的算法代码
时间: 2023-07-09 17:03:43 浏览: 106
以下是KMP算法的C++代码实现:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
void getNext(const string& pattern, int* next) {
int j = 0, k = -1;
next[0] = -1;
while (j < pattern.size() - 1) {
if (k == -1 || pattern[j] == pattern[k]) {
j++;
k++;
next[j] = k;
} else {
k = next[k];
}
}
}
int kmp(const string& s, const string& pattern) {
int i = 0, j = 0;
int next[pattern.size()];
getNext(pattern, next);
while (i < s.size() && j < pattern.size()) {
if (j == -1 || s[i] == pattern[j]) {
i++;
j++;
} else {
j = next[j];
}
}
if (j == pattern.size()) {
return i - j;
} else {
return -1;
}
}
int main() {
string s = "hello world";
string pattern = "world";
int pos = kmp(s, pattern);
if (pos != -1) {
cout << "Found pattern at position " << pos << endl;
} else {
cout << "Pattern not found" << endl;
}
return 0;
}
```
该代码实现了KMP算法的两个主要步骤:
1. 计算模式串的next数组;
2. 在文本串中匹配模式串。
其中,getNext函数用于计算next数组,kmp函数用于在文本串中匹配模式串。
阅读全文