Java String Levenshtein Distance levenshteinDistance(CharSequence lhs, CharSequence rhs)

Here you can find the source of levenshteinDistance(CharSequence lhs, CharSequence rhs)

Description

Shamelessly copied from this website with only a tiny modification: https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#Java

License

Open Source License

Declaration

public static int levenshteinDistance(CharSequence lhs, CharSequence rhs) 

Method Source Code

//package com.java2s;
//License from project: Open Source License 

public class Main {
    /**/*from www. jav  a  2s .c  o  m*/
     * Shamelessly copied from this website with only a tiny modification:
     * https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#Java
     */
    public static int levenshteinDistance(CharSequence lhs, CharSequence rhs) {
        // if strings are the same, dist is 0
        if (lhs.equals(rhs)) {
            return 0;
        }

        int len0 = lhs.length() + 1;
        int len1 = rhs.length() + 1;

        // the array of distances
        int[] cost = new int[len0];
        int[] newcost = new int[len0];

        // initial cost of skipping prefix in String s0
        for (int i = 0; i < len0; i++)
            cost[i] = i;

        // dynamically computing the array of distances

        // transformation cost for each letter in s1
        for (int j = 1; j < len1; j++) {
            // initial cost of skipping prefix in String s1
            newcost[0] = j;

            // transformation cost for each letter in s0
            for (int i = 1; i < len0; i++) {
                // matching current letters in both strings
                int match = (lhs.charAt(i - 1) == rhs.charAt(j - 1)) ? 0 : 1;

                // computing cost for each transformation
                int cost_replace = cost[i - 1] + match;
                int cost_insert = cost[i] + 1;
                int cost_delete = newcost[i - 1] + 1;

                // keep minimum cost
                newcost[i] = Math.min(Math.min(cost_insert, cost_delete), cost_replace);
            }

            // swap cost/newcost arrays
            int[] swap = cost;
            cost = newcost;
            newcost = swap;
        }

        // the distance is the cost for transforming all letters in both strings
        return cost[len0 - 1];
    }
}

Related

  1. levenshtein(final String s1, final String s2)
  2. levenshtein(String s, String t)
  3. levenshtein(String str1, String str2)
  4. levenshteinDistance(CharSequence lhs, CharSequence rhs)
  5. levenshteinDistance(CharSequence s, CharSequence t)
  6. levenshteinDistance(CharSequence str1, CharSequence str2)
  7. levenshteinDistance(final String string1, final String string2, int swap, int substitution, int insertion, int deletion)
  8. LevenshteinDistance(String actual, String expected)