码迷,mamicode.com
首页 > 其他好文 > 详细

最短编辑距离

时间:2019-05-03 14:30:10      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:code   http   abc   null   github   fun   func   turn   编辑距离   

最短编辑距离

技术图片

技术图片

1.第一行表示从ME到空字符所要删除的字符的所以情况
2.第一列表示从空字符到MY所需要插入字符的所有情况
3.斜箭头表示相同字符不需要替换,不相同字符所有替换次数的所有情况
function levenshteinDistance(a,b){
    //生成表
    const distanceMatix = Array(a.length + 1).fill(null).map(() => Array(b.length + 1).fill(null))
    //第一行的修改次数
    for(let i =0; i <= a.length; i++){
        distanceMatix[0][i] = i
    }
    //第一列的修改次数
    for(let j = 0; j <= b.length; j++){
        distanceMatix[j][0] = j
    }
    for(let i = 1; i <= a.length; i++){
        for(let j = 1; j <= b.length; j++){
            let indicator = a[i] === b[j] ? 0 : 1
            
            distanceMatix[i][j] = Math.min(
                distanceMatix[i][j-1] + 1, //删除操作的总修改次数
                distanceMatix[i-1][j] + 1,//插入修改的总修改次数
                distanceMatix[i - 1][j - 1] + indicator //不一样就替换的次数
            )
        }
    }
    //
    return distanceMatix[a.length][b.length]
}

console.log(levenshteinDistance('my name is a','y me s b'))

最短编辑距离

标签:code   http   abc   null   github   fun   func   turn   编辑距离   

原文地址:https://www.cnblogs.com/pluslius/p/10804867.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!