KMP模板


KMP算法用来处理字符串查找问题。

这里有一篇博客讲的应该是非常易于理解的

 点击打开链接


模板:

应该是比较好写的模板。

</pre><pre name="code" class="cpp">#include <stdio.h>
#include <string.h>
#include <algorithm>

using namespace std;

int T[1000100]; //字 符 串 数 组 
int P[10010]; //模 式 串 
int pre[10010]; //记录 模式串的 next值

/*寻 找 next 数组*/
void getnext(int plen)
{
	pre[0]=pre[1]=0;
	for(int i=1;i<plen;i++)
	{
		int k=pre[i];
		while(k&&P[i]!=P[k]) k=pre[k];  //递归查找前一个pre 
		pre[i+1] = P[i]==P[k]? k+1 : 0;   
	}
} 

/*寻 找 起 始 匹 配 点*/ 
int kmpsearch(int slen,int plen)
{
	getnext(plen);
	int k=0;
	for(int i=0;i<slen;i++)
	{
		while(k&&P[k]!=T[i]) k=pre[k];
		if(P[k]==T[i]) k++;
		if(k==plen) return i-k+1; //起始字符匹配点i-(k-1); 
	}
	return -1;
}


你可能感兴趣的:(KMP模板)