(function (exports) {
'use strict';
var levenshteinDistance = (function () {
function levenshteinDistance (s, ls, t, lt) {
var memo = [];
var currRowMemo;
var i;
var k;
for (k = 0; k <= lt; k += 1) {
memo[k] = k;
}
for (i = 1; i <= ls; i += 1) {
currRowMemo = [i];
for (k = 1; k <= lt; k += 1) {
currRowMemo[k] = Math.min(
currRowMemo[k - 1] + 1,
memo[k] + 1,
memo[k - 1] + (s[i - 1] !== t[k - 1] ? 1 : 0)
);
}
memo = currRowMemo;
}
return memo[lt];
}
/**
* The Levenshtein distance between two strings is a minimum number
* of edits needed to transform one string into the other, with the
* allowable edit operations being insertion, deletion,
* or substitution of a single character.
*
* @public
* @module others/levenshtein-distance
*
* @example
*
* var dist = require('path-to-algorithms/src/others/' +
* 'levenshtein-distance').levenshteinDistance;
* console.log(dist('kitten', 'sitting')); // 3
*
* @param {String} s Source string.
* @param {String} t Target string.
* @return {Number} Minimum number of edits needed
* to transform source string into the target string.
*/
return function (s, t) {
return levenshteinDistance(s, s.length, t, t.length);
};
}());
exports.levenshteinDistance = levenshteinDistance;
}(typeof exports === 'undefined' ? window : exports));