scala文本编辑距离算法实现

编辑距离定义:

编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。
许可的编辑操作包括:将一个字符替换成另一个字符,插入一个字符,删除一个字符。
例如将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)
}



你可能感兴趣的:(scala)