KMP算法详解
http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html
这篇博客形象地描述了KMP算法的原理
接下来代码实现的问题这篇讲得非常详细
http://billhoo.blog.51cto.com/2337751/411486
下面KMP代码其中char t[]是文本,char p[]是模式串,int pi[]是辅助数组
1 // 判断t中是否含有p 2 bool KMP(char *p, char *t) 3 { 4 getPI(p); 5 int n = strlen(t); 6 int m = strlen(p); 7 8 int q=0; 9 repA(0,n,i) 10 { 11 while(q>0 && p[q] != t[i]) 12 q = pi[q-1]; 13 if(p[q] == t[i]) 14 ++q; 15 if(q == m) 16 return true; 17 18 } 19 20 return false; 21 } 22 23 // 获取辅助数组int pi[] 24 void getPI(char *p) 25 { 26 pi[0] = 0; 27 int k=0; 28 int m = strlen(p); 29 repA(1, m, q) 30 { 31 32 while(k>0 && p[k]!=p[q]) 33 k = pi[k-1]; 34 if(p[k] == p[q]) 35 ++k; 36 pi[q] = k; 37 38 } 39 40 return ; 41 }
话说彻底理解KMP我花了近两天,是我脑子不好使还是...
To Be The Best Of Yourself
浙公网安备 33010602011771号