StringEditDistancepublic class StringEditDistance extends Object
Fields Summary |
---|
private int[] | costcost vector. | private int[] | backback buffer. | private final String | aTwo strings to be compared. | private final String | b |
Constructors Summary |
---|
private StringEditDistance(String a, String b)
this.a=a;
this.b=b;
cost = new int[a.length()+1];
back = new int[a.length()+1];
// back buffer
for( int i=0; i<=a.length(); i++ )
cost[i] = i;
|
Methods Summary |
---|
private int | calc()
for( int j=0; j<b.length(); j++ ) {
flip();
cost[0] = j+1;
for( int i=0; i<a.length(); i++ ) {
int match = (a.charAt(i)==b.charAt(j))?0:1;
cost[i+1] = min( back[i]+match, cost[i]+1, back[i+1]+1 );
}
}
return cost[a.length()];
| public static int | editDistance(java.lang.String a, java.lang.String b)Computes the edit distance between two strings.
The complexity is O(nm) where n=a.length() and m=b.length().
return new StringEditDistance(a,b).calc();
| public static java.lang.String | findNearest(java.lang.String key, java.lang.String[] group)Finds the string in the group closest to
key and returns it.
int c = Integer.MAX_VALUE;
String r = null;
for( int i=0; i<group.length; i++ ) {
int ed = editDistance(key,group[i]);
if( c>ed ) {
c = ed;
r = group[i];
}
}
return r;
| private void | flip()Swaps two buffers.
int[] t = cost;
cost = back;
back = t;
| private int | min(int a, int b, int c)
return Math.min(a,Math.min(b,c));
|
|