首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C中打印最长公用子字符串的代码

在C语言中打印最长公共子字符串的代码可以使用动态规划算法来实现。下面是一个示例代码:

代码语言:txt
复制
#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。同时,如果当前的最长公共子串长度大于之前记录的最大长度,就更新最大长度和最长公共子串的结束索引。

最后,根据最长公共子串的结束索引和最大长度,打印出最长公共子串。

请注意,这段代码只是一个示例,实际应用中可能需要根据具体需求进行修改和优化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的合辑

领券