Longest Common Subsequence代码输出恒为0,请求技术排查
问题排查与修正方案
我帮你找出了代码里的几个关键问题,这就是为什么你始终看到输出0的原因:
1. 数组循环边界越界
你的二维数组t是int t[n+1][m+1];,意味着它的行索引范围是0到n,列索引是0到m。但你初始化和填充数组时,循环条件写的是i<=n+1和j<=m+1,这会导致访问超出数组范围的内存,触发未定义行为——可能会覆盖其他内存数据,直接让你的LCS计算逻辑完全出错。
2. 未输出LCS计算结果
在main函数里,你调用了LCS(x,y,x.length(),y.length())但没有把返回值打印出来。程序默认返回0(来自main函数的return 0;),所以你看到的Process returned 0其实是程序的退出码,不是LCS的计算结果。
修正后的完整代码
#include <iostream> #include <cstring> #include <algorithm> // 别忘了包含max函数需要的头文件! using namespace std; // 注意:你的实现是自底向上(bottom-up)方法,不是top-bottom(那是递归记忆化方法) int LCS(string x, string y, int n, int m) { int t[n+1][m+1]; // 初始化边界:第一行和第一列都为0 for(int i=0; i<=n; i++) for(int j=0; j<=m; j++) { if(i==0 || j==0) t[i][j] = 0; } // 填充DP表 for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) { if(x[i-1] == y[j-1]) t[i][j] = 1 + t[i-1][j-1]; else t[i][j] = max(t[i-1][j], t[i][j-1]); } return t[n][m]; } int main() { string x; string y; cin >> x >> y; int result = LCS(x, y, x.length(), y.length()); cout << "LCS长度为:" << result << endl; // 新增输出语句 return 0; }
额外提醒
- 务必包含
<algorithm>头文件,因为max函数是在这个头文件里定义的,部分编译器会因为找不到max而报错。 - 术语小纠正:你的代码是**自底向上(bottom-up)**的动态规划实现,而top-bottom通常指带记忆化的递归方法,下次可以注意区分~
内容的提问来源于stack exchange,提问作者aniket sagar
相关产品推荐
相关产品推荐

