采用通用的动态规划算法,时间复杂度O(m*n),空间复杂度O(n)。
代码清单
public float getDistance(String target, String other)
{
int n = target.length();
int m = other.length();
if (n == 0 || m == 0)
{
return n == m ? 1 : 0;
}
char[] sa = target.toCharArray();
int d[] = new int[n + 1];
int p[] = new int[n + 1];
int _d[];
for (int i = 0; i <= n; i++)
{
p[i] = i;
}
char t_j;// jth character of target
int cost = 0;// cost
for (int j = 1; j <= m; j++)
{
t_j = other.charAt(j - 1);
d[0] = j;
for (int i = 1; i <= n; i++)
{
cost = sa[i - 1] == t_j ? 0 : 1;
d[i] = Math.min(Math.min(d[i - 1] + 1, p[i] + 1), p[i - 1] + cost);
}
_d = p;
p = d;
d = _d;
}
return 1.0f - (float) p[n] / Math.max(m, n);
}