# Class LongestCommonSubsequenceDistance

java.lang.Object
org.apache.commons.text.similarity.LongestCommonSubsequenceDistance

All Implemented Interfaces:
  `BiFunction<CharSequence, CharSequence, Integer>, EditDistance<Integer>, ObjectSimilarityScore<CharSequence, Integer>, SimilarityScore<Integer>`

public class LongestCommonSubsequenceDistance extends Object implements EditDistance<Integer>
An edit distance algorithm based on the length of the longest common subsequence between two strings.

This code is directly based upon the implementation in `LongestCommonSubsequence`.

For reference see: https://en.wikipedia.org/wiki/Longest_common_subsequence_problem.

For further reading see:

Lothaire, M. Applied combinatorics on words. New York: Cambridge U Press, 2005. 12-13

Since:
  1.0

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `LongestCommonSubsequenceDistance()`
  Creates a new instance.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Integer`
  `apply(CharSequence left, CharSequence right)`
  Calculates an edit distance between two `CharSequence`'s `left` and `right` as: `left.length() + right.length() - 2 * LCS(left, right)`, where `LCS` is given in `LongestCommonSubsequence.apply(CharSequence, CharSequence)`.

  ### Methods inherited from class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

  ### Methods inherited from interface BiFunction

  `andThen`

- ## Constructor Details

  - ### LongestCommonSubsequenceDistance

    public LongestCommonSubsequenceDistance()
    Creates a new instance.

- ## Method Details

  - ### apply

    public Integer apply(CharSequence left, CharSequence right)
    Calculates an edit distance between two `CharSequence`'s `left` and `right` as: `left.length() + right.length() - 2 * LCS(left, right)`, where `LCS` is given in `LongestCommonSubsequence.apply(CharSequence, CharSequence)`.
    Specified by:
      `apply` in interface `BiFunction<CharSequence, CharSequence, Integer>`
    Specified by:
      `apply` in interface `ObjectSimilarityScore<CharSequence, Integer>`
    Specified by:
      `apply` in interface `SimilarityScore<Integer>`
    Parameters:
      `left` - first character sequence.
      `right` - second character sequence.
    Returns:
      distance.
    Throws:
      `IllegalArgumentException` - if either String input `null`.