现在的位置: 首页 > 综合 > 正文

最长公共子串

2013年12月10日 ⁄ 综合 ⁄ 共 532字 ⁄ 字号 评论关闭
char *LCS(char *a,char *b) 
{
	int len_a = strlen(a);  //获取字串的长度 
	int len_b = strlen(b);
	char *p;
	int c[N][N] = {0};      //矩阵c记录两串的匹配情况 
	int start,end,len,i,j;  //start表明最长公共子串的起始点,end表明最长公共子串的终止点 
	end = len = 0;          //len表明最长公共子串的长度 
	for(i=0;i<len_a;i++)    //串开始从前向后比较 
	{
		for(j=0;j<len_b;j++)
		{
			if(a[i] == b[j])
				if(i == 0 || j == 0)
					c[i][j] = 1;
				else
					c[i][j] = c[i-1][j-1] + 1;
			if(c[i][j] > len)
			{
				len = c[i][j];
				end = j;
			}
		}
	}
	start = end - len + 1;
	p = (char *)malloc(len+1); //数组p记录最长公共子串 
	for(i=start;i<=end;i++)
		p[i-start] = b[i];
	p[len] = '\0';
	for(j=0;j<len_b;j++)
	{
		for(i=0;i<len_a;i++)
			printf("%2d",c[i][j]); 
		printf("\n");
	}
	return p;
}

抱歉!评论已关闭.