Java String Levenshtein Distance levenshteinDistance(String s, String t)

Here you can find the source of levenshteinDistance(String s, String t)

Description

Computes the Levensthein distance between two given strings.

License

Open Source License

Parameter

Parameter Description
s - the first string
t - the second string

Return

the Levensthein distance between s and t

Declaration

public static int levenshteinDistance(String s, String t) 

Method Source Code

//package com.java2s;
/**//from  w  w  w .  j a  v  a2 s .co  m
 * Copyright 2016 
 * Ivan Cantador
 * Information Retrieval Group at Universidad Autonoma de Madrid
 *
 * This is free software: you can redistribute it and/or modify it under the
 * terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 *
 * This software is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with 
 * the current software. If not, see <http://www.gnu.org/licenses/>.
 */

public class Main {
    /**
     * Computes the Levensthein distance between two given strings.
     *
     * @param s - the first string
     * @param t - the second string
     *
     * @return the Levensthein distance between s and t
     */
    public static int levenshteinDistance(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];
    }

    private static int minimum(int a, int b, int c) {
        int mi;

        mi = a;
        if (b < mi) {
            mi = b;
        }
        if (c < mi) {
            mi = c;
        }

        return mi;
    }
}

Related

  1. LevenshteinDistance(String actual, String expected)
  2. levenshteinDistance(String s, String t)
  3. levenshteinDistance(String s, String t)
  4. LevenshteinDistance(String s, String t)
  5. levenshteinDistance(String s, String t)
  6. levenshteinDistance(String s, String t)
  7. levenshteinDistance(String s, String t, int limit)
  8. levenshteinDistance(String s1, String s2)
  9. levenshteinDistance(String s1, String s2)