C编程——编程实现查找两个字符串的最大公共子串2.0

1、
题目:编程实现查找两个字符串的最大公共子串
示例:“aocdfe"和"pmcdfa"最大公共子串为"cdf”
注:最大公共子串有不止一个时,只输出第一个最大子串
利用斐波那契数列数的思想

**2、**程序

#include <stdio.h>
#include <string.h>

int main()
{
	char *str1 = "aodacdfe";
	char *str2 = "aadapmcdfea";
	
	int table[100][100] = {0};
	
	int i;
	int j;
	for (i = 0; i < strlen(str2); i++)
	{
		if (str1[0] == str2[i])
			table[0][i] = 1;
		else
			table[0][i] = 0;
	}
	
	for (i = 1; i < strlen(str1); i++)
	{
		if (str2[0] == str1[i])
			table[i][0] = 1;
		else
			table[i][0] = 0;
		
		for (j = 1; j < strlen(str2); j++)
		{
			if (str1[i] == str2[j])
			{
				table[i][j] = table[i-1][j-1] + 1;
			}
			else
			{
				table[i][j] = 0;
			}
		}
	}
	
	int start = 0;
	int longest = table[0][0];
	for (i = 1; i < strlen(str1); i++)
	{
		for (j = 1; j < strlen(str2); j++)
		{
			if (longest < table[i][j])
			{
				longest = table[i][j];
				start = i - longest + 1;
			}
		}
	}
	
	printf ("最大长度是:%d\n", longest);
	printf ("最大公共子串为:");
	for (i = start; i < longest+start; i++)
	{
		printf ("%c", str1[i]);
	}
	printf ("\n");
	
	return 0;
}

**3、**测试结果
最大长度是:4
最大公共子串为:cdfe

猜你喜欢

转载自blog.csdn.net/ypjsdtd/article/details/84567619