优化空间复杂度由O(mn)到O(min(n,m))。
function levenshtein(s, t){
if (s === t){
return 0;
}
var m = s.length, n = t.length;
if (!m || !n){
return Math.max(m,n);
}
if (m < n){
var tmp = s;
s = t;
t = tmp;
tmp = m;
m = n;
n = tmp;
tmp = null;
}
var d = [], i,j;
for (j = 0; j <= n; j++){
d[j] = j;
}
var pre, tmp, _s;
for (i = 0; i < m; i++){
_s = s.charAt(i);
pre = i + 1;
for (j = 0; j < n ; j++){
tmp = d[j];
d[j] = pre;
pre = (_s === t.charAt(j) ? tmp : 1 + Math.min(pre , Math.min(d[j+1], tmp)));
}
d[j] = pre;
}
return pre;
}
ps:PHP竟然将这个算法内置了...