string类模式匹配KMP 数组版本

来源:互联网 发布:淘宝图片很不清楚 编辑:程序博客网 时间:2024/04/30 12:40
int *findNext(char *p){int i = 0;int k = -1;int m = strlen(p);if (m <= 0)return NULL;int *next = new int[m];next[0] = -1;while (i < m){while (k >= 0 && p[i] != p[k])k = next[k];i++;k++;if (i == m)break;if (p[i] == p[k])next[i] = next[k];elsenext[i] = k;}return next;}

上面为优化版next数组求法

int KMPStrMatching(char *T,char *P,int *N,int tLen,int pLen){    int i = 0;int j = 0;    if (tLen < pLen)return -1;while (i < pLen && j < tLen){if (i == -1 || T[j] == P[i]){i++;j++;}elsei = N[i];}    if (i >= pLen)return (j - pLen + 1);elsereturn -1;     }



                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

原创粉丝点击