給出2個字符串s
和t
。我需要找到s
編輯距離(Levenshtein距離)到t
的每個子串。實際上我需要知道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
等等。
當然,我可以使用強力算法來解決這個任務。但是有更快的算法嗎?
感謝您的幫助。
我知道你的答案'{2,1,** 0,2 **,2}'是錯誤的,因爲相鄰的數字最多可以相差1:如果存在子字符串s [i..j ]',最小編輯距離爲'k'到't',那麼子串[[i + 1] ... j]在字符串的最開始插入's [i]'。在你的例子中,對於第四個位置,距離(「ab」,「b」)= 1「(1插入),對於第五個」距離(「ab」,「cb」)= 1「 。 –