#18
2-D Dynamic Programming
2-D DPGiven two strings, return the length of their longest common subsequence.
function longestCommonSubsequence(text1: string, text2: string): number {
const m = text1.length, n = text2.length;
const dp: number[][] = Array.from({ length: m + 1 }, () => new Array<number>(n + 1).fill(0));
for (let i = 1; i <= m; i++)
for (let j = 1; j <= n; j++)
dp[i][j] = text1[i - 1] === text2[j - 1]
? dp[i - 1][j - 1] + 1
: Math.max(dp[i - 1][j], dp[i][j - 1]);
return dp[m][n];
}def longest_common_subsequence(text1, text2)
m = text1.length
n = text2.length
dp = Array.new(m + 1) { Array.new(n + 1, 0) }
(1..m).each do |i|
(1..n).each do |j|
dp[i][j] = if text1[i - 1] == text2[j - 1]
dp[i - 1][j - 1] + 1
else
[dp[i - 1][j], dp[i][j - 1]].max
end
end
end
dp[m][n]
end