kmp算法

kmp算法

//计算偏移值
void get_next(const char pat[], int next[]) 
{
	memset(next,0,sizeof(next));
	int i=-1,j=0;next[0]=-1;
	while(j < strlen(pat))
	{
		if(i==-1||pat[i]==pat[j])
		{
			i++;  
			j++;  
			next[j]=i;
		}
		else 
		{
			i=next[i];
		}
	}
}

// kmp算法
int kmp(const char *str, const char*pat, int *next) 
{
	int i=0,j=0,len1=strlen(str),len2=strlen(pat);
	while((i<len1)&&(j<len2))
	{
		if(j==-1||str[i]==pat[j])
		{	
			j++;
			i++;
		}
		else 
		{
			j=next[j];
		}
	}
	if(j==len2)
		return i-len2;
	else 
		return -1;
}

 

posted on 2014-11-09 00:39  kangbry  阅读(140)  评论(0编辑  收藏  举报

导航