const int MAXN = 1000;
const int MAXM = 10000;
int nextTable[MAXN];
int pattern[MAXN];
int text[MAXM];
void getNextTable(int n){
int i = -1; // 前缀末尾
int j = 0; // 后缀末尾
nextTable[0]=-1;
while(j<n){
if(i==-1 || pattern[i]==pattern[j] ){
i++;
j++;
nextTable[j] = i;
}
else
i=nextTable[i]; // 后缀的位置回退
}
return;
}
int KMP(int n, int m){
getNextTable(n); //初始化next数组
int i = 0,j=0; // i为pattern的指针 j为text的指针
while(i<n && j < m){
if(i==-1||pattern[i]==text[j]){
i++;
j++;
}
else
i=nextTable[i]; // pattern回退
}
if(i==n) // 模式串匹配结束
return j-i+1;
else
return -1;
}
算法|KMP算法
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 前言 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision pr...
- 1 需求分析 1.1 系统目标 实现题目说所要求的三种匹配算法的算法设计,算法实现,程序能够稳定,准确的运行并实现...
- 判断两个串之间是否存在主串与子串的关系,这个过程称为串的模式匹配。 在串的模式匹配过程,子串 T 通常被叫做“模式...