c语言计算两个字符串的最长公共子串
时间: 2023-12-14 14:00:34 浏览: 98
要计算两个字符串的最长公共子串,可以使用动态规划的方法来实现。首先,创建一个二维数组来存储两个字符串中每个字符的比较结果。然后,遍历两个字符串,如果当前字符相同,就将二维数组中对应位置的值设为1,表示这两个字符相同;如果当前字符不同,就将对应位置的值设为0。
接下来,遍历二维数组,找出值为1的最大连续子数组,就是最长的公共子串。最后,将这个最长公共子串输出即可。
C语言代码示例:
```c
#include <stdio.h>
#include <string.h>
// 计算两个字符串的最长公共子串
void longestCommonSubstring(char *str1, char *str2) {
int len1 = strlen(str1);
int len2 = strlen(str2);
int dp[len1+1][len2+1];
int maxLen = 0;
int 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;
}
}
}
}
char result[maxLen+1];
memcpy(result, &str1[endPos - maxLen], maxLen);
result[maxLen] = '\0';
printf("最长公共子串为:%s\n", result);
}
int main() {
char str1[] = "abcdxyz";
char str2[] = "xyzabcd";
longestCommonSubstring(str1, str2);
return 0;
}
```
这样就可以用C语言来计算两个字符串的最长公共子串了。
阅读全文
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)