The Algorithms logo
The Algorithms
AboutDonate

LCS

A
package dynamicProgramming

import kotlin.math.max

/* This algorithm is Longest Common Subsequence

 * @param  s1,s2 - strings to be compared
 * @return Length of longest common subsequence between two strings.
   Eg., for stage and sale it is 3.(sae is the longest common subsequence)
 */

fun lcs(s1: String, s2: String): Int {
    val L = Array(s1.length + 1) { IntArray(s2.length + 1) }

    for (i in 0..s1.length) {
        for (j in 0..s2.length) {
            if (i == 0 || j == 0) L[i][j] = 0
            else if (s1[i - 1] == s2[j - 1]) L[i][j] = L[i - 1][j - 1] + 1
            else L[i][j] = max(L[i - 1][j], L[i][j - 1])
        }
    }
    return L[s1.length][s2.length]
}