string - 查找到所有子串的编辑距离的算法

标签 string algorithm levenshtein-distance similarity edit-distance

给定 2 个字符串 st。我需要为 s 中的每个子字符串找到到 t 的编辑距离(Levenshtein 距离)。实际上,对于 s 中的每个 i 位置,我需要知道从位置 i 开始的所有子字符串的最小编辑距离是多少。

例如:

t = "ab"    
s = "sdabcb"

我需要得到类似的东西:

{2,1,0,2,2}

解释:

1st position:
distance("ab", "sd") = 4 ( 2*subst )
distance("ab", "sda") = 3( 2*delete + insert )
distance("ab", "sdab") = 2 ( 2 * delete)
distance("ab", "sdabc") = 3 ( 3 * delete)
distance("ab", "sdabcb") = 4 ( 4 * delete)
So, minimum is 2

2nd position:
distance("ab", "da") = 2 (delete + insert)
distance("ab", "dab") = 1 (delete)
distance("ab", "dabc") = 2 (2*delete)
....
So, minimum is 1

3th position:
distance("ab", "ab") = 0
...
minimum is 0

等等。

我当然可以使用暴力算法来解决这个任务。但是有更快的算法吗?

感谢您的帮助。

最佳答案

要在给定字符串中查找子字符串非常容易。 您采用普通的 Levenshtein 算法并稍作修改。

首先: 而不是用 0,1,2,3,4,5,... 填充矩阵的第一行 你完全用零填充它。 (绿色矩形)

第二: 然后运行算法。

第三: 不是返回最后一行的最后一个单元格,而是搜索最后一行中的最小值并将其返回。 (红色矩形)

示例: needle: "aba", haystack: "c abba c"--> 结果 = 1(转换 abba -> aba)

enter image description here

我测试了它,它有效。

这比您在问题中逐个字符地逐个字符步进字符串的建议要快得多。您只需创建一次矩阵。

关于string - 查找到所有子串的编辑距离的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8139958/

相关文章:

r - 高效的字符串相似度分组

字符串距离,仅换位

c - C索引中的字符串指针

python - 如何实现四元搜索?

c - 如何判断函数何时访问局部变量或外部变量?

python - Levenshtein Distance 是如何计算简体中文字符的?

c - 从 C 中的字符串中获取文本的特定部分

python - 字符串匹配并在 Pandas 中获取多于 1 列

javascript - c# 如何从网站复制文本(不是源代码)

c# - ImmutableSortedDictionary 按键枚举范围