算法与数据结构-KMP算法
2012-02-16 14:08
260 查看
定义主串为src,子串(模式)为sub,简单讲KMP算法就是在比较src[i]与sub[j]时,若匹配失败,不回溯i,而是根据j=next(j)来调整j的值继续与i比较。
next(j)函数值根据sub前k个字符与到j-1为止的后k个字符相等的最大k值来确定。
给出个人的一段匹配代码:
初始化next的代码如下:
next(j)函数值根据sub前k个字符与到j-1为止的后k个字符相等的最大k值来确定。
if(j==0) next[j]=-1; else if(k≠∅) next[j]= MAX{ k | 0≤k<j 且 sub[ 0……k-1 ] = sub[ j-k……j-1 ] } ; else next[j]=0;
给出个人的一段匹配代码:
/** * KMP模式匹配 返回匹配成功的索引 失败则返回-1 * src:主串 * sub:子串(模式) * next:模式定位的next值 */ int indexByKMP(char src[],char sub[],int next[]){ int i=0,j=0,srcLen=strlen(src),subLen=strlen(sub); while(i<srcLen && j<subLen){ if(j<0||src[i]==sub[j]){ i++;j++; } else j=next[j]; } if(j>=subLen)return i-subLen; return -1; }
初始化next的代码如下:
/** * 初始化next * sub:子串(模式) * next:模式定位的next值 */ void initNext(char sub[],int next[]){ int i=0,j=-1,len=strlen(sub); next[0]=-1; while(i<len){ if(j==-1||sub[i]==sub[j]){ i++;j++;next[i]=j; } else j=next[j]; } }
相关文章推荐
- 【算法与数据结构】字符串匹配之KMP算法
- 【数据结构&&算法系列】KMP算法介绍及实现(c++ && java)
- 数据结构- 串的模式匹配算法:BF和 KMP算法
- 数据结构- 串的模式匹配算法:BF和 KMP算法
- 一步一步复习数据结构和算法基础-KMP算法
- 数据结构- 串的模式匹配算法:BF和 KMP算法
- KMP算法(养成篇) – 数据结构和算法36
- 【算法与数据结构】KMP算法
- 数据结构- 串的模式匹配算法:BF和 KMP算法
- 数据结构- 串的模式匹配算法:BF和 KMP算法
- 【数据结构】算法4.6-4.7 KMP算法
- KMP算法之NEXT数组代码原理分析 - 数据结构和算法38
- KMP算法之NEXT数组代码原理分析 - 数据结构和算法38
- KMP算法之最终实现及优化 - 数据结构和算法39
- KMP算法(养成篇) - 数据结构和算法36
- 《数据结构》之串的模式匹配算法——KMP算法
- KMP算法(养成篇) - 数据结构和算法36
- 数据结构Java实现——③串--->串的模式匹配:Brute-Force算法和 KMP算法
- 数据结构第四次上机 第四章之BF和KMP算法(顺序串的各种模式匹配算法)
- 【算法与数据结构】字符串匹配之KMP算法