1. 程式人生 > >C程式設計——程式設計實現查詢兩個字串的最大公共子串2.0

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