KMP字符串匹配(按照《算法导论》伪代码实现)

来源:互联网 发布:阿里云 cdn节点数量 编辑:程序博客网 时间:2024/05/17 17:56
#include <iostream>using namespace std;int * computePrefixFunction(const char * P){int k = 0;int length = strlen(P);int * pi = (int *)new int[length+1];pi[1] = 0;int i;for(i=2;i<=length;i++){while(k>0 && P[i-1] != P[k])k = pi[k];if(P[k] == P[i-1])k = k+1;pi[i] = k;}return pi;}void KMPFunction(const char * T,const char * P){int * pi = computePrefixFunction(P);int lengthOfText = strlen(T);int lengthOfPattern = strlen(P);    int i;int q = 0;for(i=1;i<=lengthOfText;i++){while(q>0 && T[i-1] != P[q])q = pi[q];if(T[i-1] == P[q])q = q+1;if(q == lengthOfPattern){cout<<"匹配位置"<<i-lengthOfPattern<<endl;q = pi[q];}}}void main (){char * T = "abcbabababacagggabababaababaca";char * P = "ababaca";    KMPFunction(T,P);}


 

原创粉丝点击