首页 > 代码库 > KMP

KMP

#include <stdio.h>#include <STRING.H>#include <MALLOC.H>void GetNext(int *next, char *str){	int len = strlen(str);	int i, k, flag = 1;	next[0] = -1;	for(i = 2; i < len; i++) //next[1]一定为0	{		k = next[i - 1];		flag = 1;		while(k != -1 && flag == 1) //flag跳出while,k=-1为终止条件		{			if(str[k] == str[i - 1]) //如果相等			{				next[i] = k + 1;				flag = 0;			}			else  //如果不等			{				k = next[k];			}		}	}}int Search(char *str1, char *str2){	int len1 = strlen(str1);	int len2 = strlen(str2);	int i, j;	int *next = (int *)malloc(len2 * sizeof(int));	memset(next, 0, len2 * sizeof(int));	GetNext(next, str2);	for(i = 0, j =0; i < len1 && j < len2;)	{		if(str1[i] == str2[j] || j == -1)		{			i++;			j++;		}		else		{			j = next[j];		}	}	if (j == len2)	{		return 0;	}	return 1 ;}int main(){	char *str1 = "abcabe";	char *str2 = "ababa";	printf("%d", Search(str1, str2));}

  

KMP