zoukankan      html  css  js  c++  java
  • 最短编辑距离

    最短编辑距离

    image

    image

    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[i][0] = i;
        }
        //第一列的修改次数
        for(let j = 0; j <= b.length; j++){
            distanceMatix[0][j] = j;
        }
        for(let i = 1; i <= a.length; i++){
            for(let j = 1; j <= b.length; j++){
                let indicator = a[i - 1] === b[j - 1] ? 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'))
    
    
    
  • 相关阅读:
    基站选址(编程之美2015资格赛)
    2月29日(编程之美2015资格赛)
    跳马
    电子老鼠闯迷宫
    解决按钮重复提交 unbind+bind+setTimeout
    XMLHttpRequest 中 blob类型数据转text
    ExtJs之列表(grid)
    ExtJs之组件(window)
    ExtJs基础
    问题与成长
  • 原文地址:https://www.cnblogs.com/pluslius/p/10804867.html
Copyright © 2011-2022 走看看