朴素模式匹配算法 与 KMP
假设主串长度为m,模式串长度为n
- 朴素模式匹配算法:时间复杂度O(mn),主串指针回溯
- KMP算法:时间复杂度O(m+n),主串指针不回溯
KMP算法代码
算法构成
- 根据模式串T,求出next数组
- 利用next数组进行匹配(主串指针不回溯)
// 顺序存储结构-动态数组(堆分配存储)
typedef struct{
char *ch;
int length;
} SString
// S:主串
// T:子串,即模式串
// next:子串的next数组
int Index_KMP(SString S,SString T,int next[]){
int i = 1,j=1;
while(i<=S.length&&j<=T.length){
if(j==0||S.ch[i]=T.length){
++i; // 继续比较后继字符
++j;
}else{
j = next[j]; // 模式串向右移动
}
}
if(j>T.length){
return i-T.length; // 匹配成功
}else{
return 0;
}
}