Mega Code Archive

 
Categories / Java / Data Type
 

Compute Levenshtein distance

/*   Copyright 2004 The Apache Software Foundation  *  *   Licensed under the Apache License, Version 2.0 (the "License");  *   you may not use this file except in compliance with the License.  *   You may obtain a copy of the License at  *  *       http://www.apache.org/licenses/LICENSE-2.0  *  *   Unless required by applicable law or agreed to in writing, software  *   distributed under the License is distributed on an "AS IS" BASIS,  *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *   See the License for the specific language governing permissions and  *  limitations under the License.  */ //based on Apache technology http://www.apache.org public class Levenshtein {   // ****************************   // Get minimum of three values   // ****************************   private static int minimum(int a, int b, int c) {     int mi = a;     if (b < mi)       mi = b;     if (c < mi)       mi = c;     return mi;   }   // *****************************   // Compute Levenshtein distance   // *****************************   public static int distance(String s, String t) {     int d[][]; // matrix     int n; // length of s     int m; // length of t     int i; // iterates through s     int j; // iterates through t     char s_i; // ith character of s     char t_j; // jth character of t     int cost; // cost     // Step 1     n = s.length();     m = t.length();     if (n == 0)       return m;     if (m == 0)       return n;     d = new int[n + 1][m + 1];     // Step 2     for (i = 0; i <= n; i++)       d[i][0] = i;     for (j = 0; j <= m; j++)       d[0][j] = j;     // Step 3     for (i = 1; i <= n; i++) {       s_i = s.charAt(i - 1);       // Step 4       for (j = 1; j <= m; j++) {         t_j = t.charAt(j - 1);         // Step 5         if (s_i == t_j)           cost = 0;         else           cost = 1;         // Step 6         d[i][j] = minimum(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost);       }     }     // Step 7     return d[n][m];   } }