给定两个字符串A和B,使用动态规划算法完成以下任务: 基础任务: 输出最长公共子串的长度 用c++完成
时间: 2024-11-27 18:12:25 浏览: 20
当我们要使用动态规划解决给定两个字符串A和B的最长公共子串(Longest Common Substring, LCS)问题时,我们可以创建一个二维数组dp来存储子问题的解。数组的每个元素dp[i][j]表示A从0到i和B从0到j的最长公共子串的长度。
以下是使用C++实现这个算法的基本步骤:
```cpp
#include <iostream>
#include <vector>
int longestCommonSubstr(std::string A, std::string B) {
int m = A.length();
int n = B.length();
// 初始化二维数组
std::vector<std::vector<int>> dp(m + 1, std::vector<int>(n + 1, 0));
// 记录最长公共子串长度和结束位置
int maxLen = 0;
int endPos = -1;
for (int i = 1; i <= m; ++i) {
for (int j = 1; j <= n; ++j) {
if (A[i - 1] == B[j - 1]) { // 如果字符相等
dp[i][j] = dp[i - 1][j - 1] + 1; // 更新子问题的解
if (dp[i][j] > maxLen) { // 如果找到更长的子串
maxLen = dp[i][j];
endPos = i - 1; // 更新最长子串结束位置
}
}
}
}
// 最后返回最长公共子串长度
return maxLen;
}
int main() {
std::string A = "ABCDGH";
std::string B = "AEDFHR";
int result = longestCommonSubstr(A, B);
std::cout << "The length of the longest common substring is: " << result << std::endl;
return 0;
}
```
在这个例子中,`longestCommonSubstr`函数计算了A和B的最长公共子串长度,并在主函数中提供了一个简单的测试用例。如果你需要进一步的帮助,可以问我关于动态规划的具体问题,或者关于如何优化算法效率的问题。
阅读全文