/*
* This file is part of Flicklib.
*
* Copyright (C) Francis De Brabandere
*
* 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.
*/
package com.flicklib.tools;
public class LevenshteinDistance {
// ****************************
// Get minimum of three values
// ****************************
private static int min(int a, int b, int c) {
int minimum;
minimum = a;
if (b < minimum) {
minimum = b;
}
if (c < minimum) {
minimum = c;
}
return minimum;
}
public static int distance(String s, String t) {
int d[][]; // matrix
int lengthS; // length of s
int lengthT; // length of t
int i; // iterates through s
int j; // iterates through t
char si; // ith character of s
char tj; // jth character of t
int cost; // cost
// Step 1
lengthS = s.length();
lengthT = t.length();
if (lengthS == 0) {
return lengthT;
}
if (lengthT == 0) {
return lengthS;
}
d = new int[lengthS + 1][lengthT + 1];
// Step 2
for (i = 0; i <= lengthS; i++) {
d[i][0] = i;
}
for (j = 0; j <= lengthT; j++) {
d[0][j] = j;
}
// Step 3
for (i = 1; i <= lengthS; i++) {
si = s.charAt(i - 1);
// Step 4
for (j = 1; j <= lengthT; j++) {
tj = t.charAt(j - 1);
// Step 5
if (si == tj) {
cost = 0;
} else {
cost = 1;
}
// Step 6
d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1]
+ cost);
}
}
// Step 7
return d[lengthS][lengthT];
}
}