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

Java实现Levenshtein Distance输出结果异常问题求助

解决Levenshtein距离结果比实际值少1的问题

嘿,我刚看到你在Java课程作业里实现Levenshtein距离时遇到的麻烦——比如比较"cat"和"hat",正确距离应该是1,但你的输出却是0。我之前帮不少同学排查过这类问题,大概率是边界条件或者初始化逻辑出了疏漏,咱们一步步拆解可能的原因:

常见问题点及修复方案

1. DP表初始化的大小或边界填充错误

Levenshtein距离的核心是构建一个(n+1)×(m+1)的DP表(n和m分别是两个字符串的长度),用来存储子问题的结果。如果你的代码犯了以下任意一个错误,都会导致结果少1:

  • 只创建了n×m大小的数组,没给边界留位置
  • 填充第一行/第一列时,没有从0递增到字符串长度(比如只填充到n-1或m-1)

举个错误的初始化例子:

// 错误:数组大小没+1,边界无法完整填充
int[][] dp = new int[s1.length()][s2.length()];

正确的初始化应该是:

int[][] dp = new int[s1.length() + 1][s2.length() + 1];
// 填充第一列:空字符串转成s1前i个字符的距离是i
for (int i = 0; i <= s1.length(); i++) {
    dp[i][0] = i;
}
// 填充第一行:空字符串转成s2前j个字符的距离是j
for (int j = 0; j <= s2.length(); j++) {
    dp[0][j] = j;
}

2. 最终结果取错了索引

就算DP表初始化正确,如果你最后返回的是dp[s1.length()-1][s2.length()-1]而不是dp[s1.length()][s2.length()],也会得到少1的结果。因为DP表的dp[n][m]才是两个完整字符串比较后的最终距离,而dp[n-1][m-1]只是最后一个字符比较后的子问题结果。

3. 字符相等时的赋值逻辑错误

当两个字符相等时,正确的逻辑是直接继承左上角的子问题结果:dp[i][j] = dp[i-1][j-1]。如果你的代码错误地写成了dp[i][j] = dp[i-1][j-1] - 1,也会导致整体结果被多减了1。

快速排查步骤

针对你遇到的"cat"和"hat"的例子,你可以:

  • 打印出DP表的所有值,看看第一行是不是[0,1,2,3],第一列是不是[0,1,2,3]
  • 确认dp[3][3]的值是不是1,而你返回的是不是这个位置的值

按照这几个方向排查,应该很快就能找到问题所在啦!

内容的提问来源于stack exchange,提问作者Will Edwards

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:43:03