9.KMP模式匹配算法实现o(n)复杂度的匹配
2014-04-16 22:44
579 查看
#include<stdio.h> #define MAXSIZELEN 255 typedef unsigned char SString[MAXSIZELEN + 1]; void InitSString(SString &A, char *a) { int i = 1, j = 0; while (i < MAXSIZELEN && a[j]) { A[i++] = a[j++]; } A[i] = '\0'; A[0] = j; } void OutputSString(SString &A) { printf("%s\n",A+1); } int next[MAXSIZELEN]; void get_next(SString T)//, int next[]) { int i = 1; next[1] = 0; int j = 0; while (i < T[0]) { if (j == 0 || T[i] == T[j]) { ++i; ++j; next[i] = j; } else j = next[j]; } } int Index_KMP(SString S, SString T, int pos) {//s为主串 t为模式串 int i = pos; int j = 1; //int next[MAXSIZELEN]; get_next(T);//, next); while (i <= S[0] && j <= T[0]) { if (j == 0 || S[i] == T[j]) { ++i; ++j; } else j = next[j]; } if (j > T[0]) return i - T[0]; else return 0; } //by zhaoyang 2014.4.16 int main() { SString a,b; InitSString(a, "abcbaaabcccac=bacabaabcaacabaabcac"); printf("主串( %d ):\n",a[0] ); OutputSString(a); InitSString(b, "abaabcac"); printf("模式串(%c):\n",b[0]+48); OutputSString(b); printf("下面是经典的KMP算法---------的结果:\n"); int t=Index_KMP(a, b, 1); printf("匹配位置就是 :------- %d ------\n" ,t); printf("next数组:\n"); for (int i = 1; i <= b[0]; i++) printf("%d ", i); putchar(10); for (int i = 1; i <= b[0]; i++) printf("%d ", next[i]); putchar(10); return 0; }
相关文章推荐
- 数据结构编程笔记十一:第四章 串 定长顺序串以及模式匹配算法(BF和KMP)的实现
- KMP模式匹配算法实现
- KMP字符串模式匹配算法实现
- KMP模式匹配算法实现
- KMP字符串模式匹配算法实现
- KMP字符串模式匹配算法实现
- KMP模式匹配算法实现与改进
- KMP模式匹配算法C++实现
- KMP模式匹配算法 C++实现
- KMP字符串模式匹配算法实现(php)
- 使用Python语言写一个简单的KMP模式匹配算法实现
- 数据结构之串的KMP模式匹配算法的实现
- KMP模式匹配算法中next,nextval的分别实现
- 模式匹配 -- KMP 算法原理与实现
- KMP模式匹配算法原理分析、next数组优化及java实现
- java实现字符串的一般和KMP模式匹配算法
- KMP模式匹配算法分析与实现
- KMP字符串模式匹配算法实现
- 理解与实现KMP模式匹配算法
- KMP字符串模式匹配算法Java实现