You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 10:52:45