用c语言找出其中最长的公共连续子串的长度,希望你能帮助他。例如,两个字符串分别为“abcde”和“abdge”,结果为2。
时间: 2024-05-01 19:17:04 浏览: 85
以下是一种基于动态规划的解法:
```c
#include <stdio.h>
#include <string.h>
int max(int a, int b) {
return a > b ? a : b;
}
int longest_common_substring(char *s1, char *s2) {
int len1 = strlen(s1);
int len2 = strlen(s2);
int dp[len1+1][len2+1]; // dp[i][j]表示以s1[i-1]和s2[j-1]结尾的最长公共子串长度
int max_len = 0;
// 初始化
memset(dp, 0, sizeof(dp));
// 动态规划求解
for (int i = 1; i <= len1; i++) {
for (int j = 1; j <= len2; j++) {
if (s1[i-1] == s2[j-1]) {
dp[i][j] = dp[i-1][j-1] + 1;
max_len = max(max_len, dp[i][j]);
}
else {
dp[i][j] = 0;
}
}
}
return max_len;
}
int main() {
char s1[] = "abcde";
char s2[] = "abdge";
printf("%d\n", longest_common_substring(s1, s2)); // 输出2
return 0;
}
```
该算法的时间复杂度为$O(n^2)$,其中$n$为两个字符串的长度之和。
阅读全文