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` 个字符结尾的最长公共子串的长度。通过迭代计算,最终得到最长公共子串的长度和结束索引,然后打印出最长公共子串。
版权声明:本文标题:c语言两个字符串最大公共字符串 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1705583127h491017.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论