编辑距离定义:
编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。
许可的编辑操作包括:将一个字符替换成另一个字符,插入一个字符,删除一个字符。
例如将eeba转变成abac:
1. eba(删除第一个e)
2. aba(将剩下的e替换成a)
3. abac(在末尾插入c)
所以eeba和abac的编辑距离就是3
俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念。
许可的编辑操作包括:将一个字符替换成另一个字符,插入一个字符,删除一个字符。
例如将eeba转变成abac:
1. eba(删除第一个e)
2. aba(将剩下的e替换成a)
3. abac(在末尾插入c)
所以eeba和abac的编辑距离就是3
俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念。
代码实现:
def editDist(s1:String, s2:String):Int ={
val s1_length = s1.length+1
val s2_length = s2.length+1
val matrix=Array.ofDim[Int](s1_length,s2_length)
for(i <- 0.until(s1_length)){
matrix(i)(0) = i
}
for(j <- 0.until(s2_length)){
matrix(0)(j) = j
}
var cost = 0
for(j <- 1.until(s2_length)){
for(i <- 1.until(s1_length)){
if(s1.charAt(i-1)==s2.charAt(j-1)){
cost = 0
}else{
cost = 1
}
matrix(i)(j)=math.min(math.min(matrix(i-1)(j)+1,matrix(i)(j-1)+1),matrix(i-1)(j-1)+cost)
}
}
matrix(s1_length-1)(s2_length-1)
}