用c语言写一个找最大公共子串的程序
时间: 2023-12-01 15:04:09 浏览: 69
以下是一个使用动态规划算法的C语言程序,用于查找两个字符串的最长公共子串:
```
#include <stdio.h>
#include <string.h>
#define MAXLEN 100
int main()
{
char str1[MAXLEN], str2[MAXLEN];
int len1, len2, i, j, max, end;
int dp[MAXLEN][MAXLEN];
printf("请输入第一个字符串:\n");
scanf("%s", str1);
printf("请输入第二个字符串:\n");
scanf("%s", str2);
len1 = strlen(str1);
len2 = strlen(str2);
max = 0;
end = 0;
// 初始化dp数组
for (i = 0; i < len1; i++)
for (j = 0; j < len2; j++)
dp[i][j] = 0;
// 动态规划求解
for (i = 0; i < len1; i++)
for (j = 0; j < len2; j++)
{
if (str1[i] == str2[j])
{
if (i == 0 || j == 0)
dp[i][j] = 1;
else
dp[i][j] = dp[i-1][j-1] + 1;
if (dp[i][j] > max)
{
max = dp[i][j];
end = i;
}
}
}
// 输出结果
if (max == 0)
printf("两个字符串没有公共子串\n");
else
{
printf("最长公共子串为:");
for (i = end - max + 1; i <= end; i++)
printf("%c", str1[i]);
printf("\n");
}
return 0;
}
```
阅读全文