C语言实现查找两个字符串中的最大公共子串
时间: 2023-05-20 21:01:07 浏览: 108
一些C语言中字符串的算法问题解决实例小结
可以使用动态规划算法来实现查找两个字符串中的最大公共子串。具体实现方法如下:
1. 定义一个二维数组dp,其中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[i][j]的值以及对应的i和j,即为最大公共子串的长度和结束位置。
5. 最后根据最大公共子串的长度和结束位置,可以得到最大公共子串的起始位置和内容。
下面是C语言的实现代码:
```c
#include <stdio.h>
#include <string.h>
void findMaxCommonSubstr(char* str1, char* str2)
{
int len1 = strlen(str1);
int len2 = strlen(str2);
int dp[len1+1][len2+1];
int maxLen = 0, endPos = 0;
memset(dp, 0, sizeof(dp));
for(int i=1; i<=len1; i++)
{
for(int 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] > maxLen)
{
maxLen = dp[i][j];
endPos = i-1;
}
}
else
{
dp[i][j] = 0;
}
}
}
if(maxLen == 0)
{
printf("No common substring found.\n");
}
else
{
printf("The maximum common substring is \"%.*s\".\n", maxLen, str1+endPos-maxLen+1);
}
}
int main()
{
char str1[] = "abcdefg";
char str2[] = "bcdehij";
findMaxCommonSubstr(str1, str2);
return 0;
}
```
输出结果为:
```
The maximum common substring is "bcde".
```
阅读全文