admin 管理员组

文章数量: 887021


2024年1月18日发(作者:linux安装版iso下载)

c语言两个字符串最大公共字符串

解决两个字符串的最长公共子串问题通常使用动态规划来实现。以下是一个用C语言实现的示例:

```c

#include

#include

// 函数用于计算两个字符串的最长公共子串

void longestCommonSubstring(const char *str1, const char *str2) {

int len1 = strlen(str1);

int len2 = strlen(str2);

// 创建一个二维数组来存储中间结果

int dp[len1 + 1][len2 + 1];

int maxLen = 0; // 存储最长公共子串的长度

int endIndex = 0; // 存储最长公共子串在第一个字符串中的结束索引

// 初始化数组

for (int i = 0; i <= len1; ++i) {

for (int j = 0; j <= len2; ++j) {

if (i == 0 || j == 0)

dp[i][j] = 0;

else 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];

endIndex = i - 1;

}

} else {

dp[i][j] = 0;

}

}

}

// 打印最长公共子串

if (maxLen > 0) {

printf("Longest Common Substring: ");

for (int i = endIndex - maxLen + 1; i <= endIndex; ++i) {

printf("%c", str1[i]);

}

printf("n");

} else {

printf("No common substring found.n");

}

}

int main() {

const char *str1 = "ABCBDAB";

const char *str2 = "BDCAB";

longestCommonSubstring(str1, str2);

return 0;

}

```

在这个例子中,我们使用了一个二维数组 `dp` 来存储中间结果,其中 `dp[i][j]` 表示以第一个字符串的第 `i` 个字符和第二个字符串的第 `j` 个字符结尾的最长公共子串的长度。通过迭代计算,最终得到最长公共子串的长度和结束索引,然后打印出最长公共子串。


本文标签: 字符串 子串 使用 安装版 计算