c语言寻找公共子串
时间: 2023-06-21 17:11:17 浏览: 163
寻找两个字符串的最长公共子串可以使用动态规划算法,具体步骤如下:
1. 定义一个二维数组dp[i][j],其中dp[i][j]表示以第一个字符串的第i个字符和第二个字符串的第j个字符结尾的最长公共子串的长度。
2. 初始化dp数组,将第一行和第一列的所有元素都设置为0。
3. 从第二行和第二列开始遍历两个字符串,如果第一个字符串的第i个字符和第二个字符串的第j个字符相同,则dp[i][j]=dp[i-1][j-1]+1,否则dp[i][j]=0。
4. 遍历dp数组,找到其中最大的元素,并记录其所在的行和列,即可得到最长公共子串。
下面是一个简单的C语言实现:
```c
#include <stdio.h>
#include <string.h>
int main()
{
char str1[100], str2[100];
int len1, len2, i, j, max_len = 0, max_i = 0, max_j = 0;
int dp[100][100] = {0};
printf("请输入第一个字符串:");
scanf("%s", str1);
printf("请输入第二个字符串:");
scanf("%s", str2);
len1 = strlen(str1);
len2 = strlen(str2);
for(i = 1; i <= len1; i++)
{
for(j = 1; j <= len2; j++)
{
if(str1[i-1] == str2[j-1])
{
dp[i][j] = dp[i-1][j-1] + 1;
if(dp[i][j] > max_len)
{
max_len = dp[i][j];
max_i = i;
max_j = j;
}
}
else
{
dp[i][j] = 0;
}
}
}
printf("最长公共子串为:");
for(i = max_i - max_len; i < max_i; i++)
{
printf("%c", str1[i]);
}
printf("\n");
return 0;
}
```
阅读全文