ds-algo-study
Version:
Just experimenting with publishing a package
50 lines (41 loc) • 1.17 kB
JavaScript
/**
* A Dynamic Programming based solution for calculation of the Levenshtein Distance
* https://en.wikipedia.org/wiki/Levenshtein_distance
*/
function minimum( a, b, c ) {
if ( a < b && a < c ) {
return a
} else if ( b < a && b < c ) {
return b
} else {
return c
}
}
function costOfSubstitution( x, y ) {
return x === y ? 0 : 1
}
function calculate( x, y ) {
const dp = new Array( x.length + 1 )
for ( let i = 0; i < x.length + 1; i++ ) {
dp[ i ] = new Array( y.length + 1 )
}
for ( let i = 0; i < x.length + 1; i++ ) {
for ( let j = 0; j < y.length + 1; j++ ) {
if ( i === 0 ) {
dp[ i ][ j ] = j
} else if ( j === 0 ) {
dp[ i ][ j ] = i
} else {
dp[ i ][ j ] = minimum( dp[ i - 1 ][ j - 1 ] + costOfSubstitution( x.charAt( i - 1 ), y.charAt( j - 1 ) ), dp[ i - 1 ][ j ] + 1, dp[ i ][ j - 1 ] + 1 )
}
}
}
return dp[ x.length ][ y.length ]
}
function main() {
const x = '' // enter your string here
const y = '' // enter your string here
console.log( 'Levenshtein distance between ' + x + ' and ' + y + ' is: ' )
console.log( calculate( x, y ) )
}
main()