最长公共子串的长度 描述:给定两个字符串str1和str2,输出两个字符串的最长公共子串的长度(假设str1和str2的最长公共子串存在且唯一)。c++实现
时间: 2024-01-07 13:47:53 浏览: 84
C++实现找出两个字符串中最大的公共子串
5星 · 资源好评率100%
以下是C语言实现最长公共子串长度的代码:
```c
#include <stdio.h>
#include <string.h>
int lcs(char *str1, char *str2) {
int len1 = strlen(str1);
int len2 = strlen(str2);
int maxLen = 0;
int dp[len1+1][len2+1];
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];
}
}
}
}
return maxLen;
}
int main() {
char str1[] = "abcde";
char str2[] = "cdeab";
printf("The length of longest common substring is: %d", lcs(str1, str2));
return 0;
}
```
运行结果:
```
The length of longest common substring is: 3
```
其中,dp[i][j]表示以str1[i-1]和str2[j-1]结尾的最长公共子串长度。如果str1[i-1]等于str2[j-1],那么dp[i][j] = dp[i-1][j-1] + 1。如果dp[i][j]大于maxLen,则更新maxLen。最后返回maxLen即可。
阅读全文