Skip to content

Latest commit

 

History

History
39 lines (32 loc) · 1.47 KB

levenshteinDistance.md

File metadata and controls

39 lines (32 loc) · 1.47 KB
标题 标签
levenshteinDistance(编辑距离) string,algorithm(字符串,算法)

使用 Levenshtein距离算法计算两个字符串之间的差异。

  • 如果两个字符串中的任何一个的长度为零,则返回另一个字符串的长度。
  • 使用 for 循环遍历目标字符串的字母,使用嵌套的 for 循环遍历源字符串的字母。
  • 计算分别替换目标和源中 i - 1 和 j - 1 对应的字母的成本(如果相同则为 0,否则为 1)。
  • 使用 Math.min() 填充 2D 数组中的每个元素,上面的单元格的最小值增加 1,左侧的单元格增加 1,或者左上角的单元格增加先前计算的成本。
  • 返回生成的数组的最后一行的最后一个元素。
const levenshteinDistance = (s,t) => {
    if(!s.length){
        return t.length;
    }
    if(!t.length){
        return s.length;
    }
    const arr = [];
    for(let i = 0;i <= t.length;i++){
        arr[i] = [i];
        for(let j = 1;j <= s.length;j++){
            arr[i][j] = i === 0 ? j : Math.min(arr[i - 1][j] + 1,arr[i][j - 1] + 1,arr[i - 1][j - 1] + (s[j - 1] === t[i - 1] ? 0 : 1));
        }
    }
    return arr[t.length][s.length];
}

调用方式:

levenshteinDistance('duck', 'dark'); // 2

应用场景