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

为何最长公共子序列(LCS)距离在编辑距离中禁止替换操作?

关于最长公共子序列(LCS)距离的疑问

编辑距离是一类经典问题,常见类型包括:

不同类型的编辑距离允许不同的字符串操作集合,例如:

  • Levenshtein距离:支持删除、插入、替换操作
  • 最长公共子序列(LCS)距离:仅允许插入和删除操作,不支持替换
  • Hamming距离:仅允许替换操作,因此只适用于长度相同的字符串
  • Damerau–Levenshtein距离:支持插入、删除、替换以及相邻字符换位操作
  • Jaro距离:仅允许换位操作

我对LCS距离的规则存在两个困惑点:

  1. 为什么它不允许替换操作?按照我对算法的理解,如果某个字符潜在能匹配目标字符串里的字符,就不会被替换或删除。
  2. 为什么它允许插入和删除操作?会不会出现某个本可匹配的字符,因为在目标字符串里位置靠后而被删除的情况?

为了方便分析,我写了一个算法,用网格形式展示计算结果(原算法带颜色标记路径,这里无法显示):

$ java dynamic_programming.EditDistance republicans democrats true
|  |  |d |e |m |o |c |r |a |t |s |
|  |0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |
|r |1 |2 |3 |4 |5 |6 |5 |6 |7 |8 |
|e |2 |3 |2 |3 |4 |5 |6 |7 |8 |9 |
|p |3 |4 |3 |4 |5 |6 |7 |8 |9 |10|
|u |4 |5 |4 |5 |6 |7 |8 |9 |10|11|
|b |5 |6 |5 |6 |7 |8 |9 |10|11|12|
|l |6 |7 |6 |7 |8 |9 |10|11|12|13|
|i |7 |8 |7 |8 |9 |10|11|12|13|14|
|c |8 |9 |8 |9 |10|9 |10|11|12|13|
|a |9 |10|9 |10|11|10|11|10|11|12|
|n |10|11|10|11|12|11|12|11|12|13|
|s |11|12|11|12|13|12|13|12|13|12|
=========================
12 // (New Edit Distance, Without Substitution)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:27:44