c语言编写程序找出其中最长的公共连续子串的长度,例如,两个字符串分别为“abcde”和“abdge”,结果为2
时间: 2024-05-02 13:21:52 浏览: 110
以下是一个基于动态规划的C语言程序,可以找出两个字符串的最长公共连续子串的长度:
```c
#include <stdio.h>
#include <string.h>
int max(int a, int b) {
return (a > b) ? a : b;
}
int longestCommonSubstring(char s1[], char s2[]) {
int m = strlen(s1);
int n = strlen(s2);
int dp[m+1][n+1];
int maxLength = 0;
// 初始化dp数组
for (int i = 0; i <= m; i++) {
for (int j = 0; j <= n; j++) {
if (i == 0 || j == 0) {
dp[i][j] = 0;
} else if (s1[i-1] == s2[j-1]) {
dp[i][j] = dp[i-1][j-1] + 1;
maxLength = max(maxLength, dp[i][j]);
} else {
dp[i][j] = 0;
}
}
}
return maxLength;
}
int main() {
char s1[] = "abcde";
char s2[] = "abdge";
int length = longestCommonSubstring(s1, s2);
printf("%d\n", length);
return 0;
}
```
该程序首先定义了一个辅助函数`max`,用于比较两个整数的大小并返回较大的那个。
接下来,定义了一个名为`longestCommonSubstring`的函数,该函数接受两个字符串`s1`和`s2`作为输入,返回它们的最长公共连续子串的长度。该函数中使用了一个二维数组`dp`来记录中间结果,其中`dp[i][j]`表示以`s1[i-1]`和`s2[j-1]`结尾的最长公共连续子串的长度。最终,函数返回的结果是`dp`数组中的最大值。
在`main`函数中,我们定义了两个字符串`s1`和`s2`,并调用了`longestCommonSubstring`函数来计算它们的最长公共连续子串的长度。在本例中,程序将输出2,即字符串"ab"的长度。
阅读全文