UNPKG

ds-algo-study

Version:

Just experimenting with publishing a package

34 lines (30 loc) 1.13 kB
/* * Given two sequences, find the length of longest subsequence present in both of them. * A subsequence is a sequence that appears in the same relative order, but not necessarily contiguous. * For example, "abc", "abg", "bdf", "aeg", ‘"acefg", ..etc are subsequences of "abcdefg" */ function longestCommonSubsequence( x, y, str1, str2, dp ) { if ( x === -1 || y === -1 ) { return 0 } else { if ( dp[ x ][ y ] !== 0 ) { return dp[ x ][ y ] } else { if ( str1[ x ] === str2[ y ] ) { dp[ x ][ y ] = 1 + longestCommonSubsequence( x - 1, y - 1, str1, str2, dp ) return dp[ x ][ y ] } else { dp[ x ][ y ] = Math.max( longestCommonSubsequence( x - 1, y, str1, str2, dp ), longestCommonSubsequence( x, y - 1, str1, str2, dp ) ) return dp[ x ][ y ] } } } } function main() { const str1 = 'ABCDGH' const str2 = 'AEDFHR' const dp = new Array( str1.length + 1 ).fill( 0 ).map( x => new Array( str2.length + 1 ).fill( 0 ) ) const res = longestCommonSubsequence( str1.length - 1, str2.length - 1, str1, str2, dp ) console.log( res ) } main()