在C语言中打印最长公共子字符串的代码可以使用动态规划算法来实现。下面是一个示例代码:
#include <stdio.h>
#include <string.h>
void printLongestCommonSubstring(char* str1, char* str2) {
int len1 = strlen(str1);
int len2 = strlen(str2);
int maxLength = 0; // 最长公共子串的长度
int endIndex = 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] > maxLength) {
maxLength = dp[i][j];
endIndex = i - 1; // 更新最长公共子串的结束索引
}
}
}
}
if (maxLength == 0) {
printf("No common substring found.\n");
return;
}
printf("Longest common substring: ");
for (int i = endIndex - maxLength + 1; i <= endIndex; i++) {
printf("%c", str1[i]);
}
printf("\n");
}
int main() {
char str1[] = "abcdefg";
char str2[] = "defghij";
printLongestCommonSubstring(str1, str2);
return 0;
}
这段代码使用了一个二维数组 dp
来记录最长公共子串的长度。通过两层循环遍历两个字符串的所有字符,如果当前字符相等,则将 dp[i][j]
设置为前一个字符的最长公共子串长度加1。同时,如果当前的最长公共子串长度大于之前记录的最大长度,就更新最大长度和最长公共子串的结束索引。
最后,根据最长公共子串的结束索引和最大长度,打印出最长公共子串。
请注意,这段代码只是一个示例,实际应用中可能需要根据具体需求进行修改和优化。
领取专属 10元无门槛券
手把手带您无忧上云