假设您已为字符串X =“AGGGCT”和字符串Y =“AGGCA”提供了dp表
m = X + 1的长度
n = Y + 1的长度
0 1 2 3 4 5
1 0 1 2 3 4
2 1 0 1 2 3
dp[m][n] = 3 2 1 0 1 2
4 3 2 1 1 2
5 4 3 2 1 2
6 5 4 3 2 2
并且您想要重建三个字符串,如下所示
string row1 = "AGGGCT" ;
string row2 = "||| | " ;
string row3 = "AGG-CA" ;
如果可能在C / C ++ / Java中发布代码,如何重构字符串row1,row2和row3。
答案 0 :(得分:0)
我认为此页面可以作为一个很好的起点:
http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#Java
你必须做一些修改,但核心思想应该是存储在“min”中,为给定的(i,j)选择哪个案例,并且在返回之前你可以向后遍历矩阵距离[str1.length()] [str2.length()]一步一步。如果在步骤中距离相同,则显示|,如果它们不同但是踩到对角线那么它是一个改变步骤,否则如果垂直/水平移动/添加。 您可以将此“向后”信息存储在字符串中,然后以相反的顺序显示它。