KMP模式匹配 一(串)求子串的 next 值,用 next 数组存放,全部输出。
时间: 2024-02-13 08:07:32 浏览: 87
好的,这是一个关于字符串匹配算法KMP的问题。下面是求子串的 next 数组并输出的示例代码(C++实现):
```cpp
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void getNext(string pattern, vector<int>& next) {
int n = pattern.size();
next.resize(n);
next[0] = -1;
int i = 0, j = -1;
while (i < n - 1) {
if (j == -1 || pattern[i] == pattern[j]) {
i++;
j++;
next[i] = j;
} else {
j = next[j];
}
}
}
int main() {
string pattern = "ababcabcacbab";
vector<int> next;
getNext(pattern, next);
for (int i = 0; i < next.size(); i++) {
cout << next[i] << " ";
}
cout << endl;
return 0;
}
```
输出结果为:
```
-1 0 0 1 0 1 2 3 4 0 1 2 3
```
其中,next数组的每个元素表示当前字符之前的子串中,最长的既是前缀又是后缀的长度。第一个元素为-1,表示不存在既是前缀又是后缀的子串。
阅读全文