码迷,mamicode.com
首页 > 其他好文 > 详细

KMP

时间:2014-09-09 11:02:28      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:blog   io   ar   for   div   log   c   amp   size   

#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

标签:blog   io   ar   for   div   log   c   amp   size   

原文地址:http://www.cnblogs.com/jsy306/p/3961472.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!