Algorithm
Problem Name: 1143. Longest Common Subsequence
Given two strings text1
and text2
, return the length of their longest common subsequence. If there is no common subsequence, return 0
.
A subsequence of a string is a new string generated from the original string with some characters (can be none) deleted without changing the relative order of the remaining characters.
- For example,
"ace"
is a subsequence of"abcde"
.
A common subsequence of two strings is a subsequence that is common to both strings.
Example 1:
Input: text1 = "abcde", text2 = "ace" Output: 3 Explanation: The longest common subsequence is "ace" and its length is 3.
Example 2:
Input: text1 = "abc", text2 = "abc" Output: 3 Explanation: The longest common subsequence is "abc" and its length is 3.
Example 3:
Input: text1 = "abc", text2 = "def" Output: 0 Explanation: There is no such common subsequence, so the result is 0.
Constraints:
1 <= text1.length, text2.length <= 1000
text1
andtext2
consist of only lowercase English characters.
Code Examples
#1 Code Example with Javascript Programming
Code -
Javascript Programming
const longestCommonSubsequence = function(text1, text2) {
let dp = new Array(text1.length + 1)
for (let i = 0; i < dp.length; i++)
dp[i] = new Array(text2.length + 1).fill(0)
for (let i = 1; i < dp.length; i++) {
for (let j = 1; j < dp[i].length; j++) {
if (text1[i - 1] == text2[j - 1]) dp[i][j] = 1 + dp[i - 1][j - 1]
else dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1])
}
}
return dp[dp.length - 1].pop()
}
Copy The Code &
Try With Live Editor
Input
Output
#2 Code Example with Python Programming
Code -
Python Programming
class Solution:
def longestCommonSubsequence(self, a: str, b: str) -> int:
m, n = len(a), len(b)
dp = [[0 for j in range(n + 1)] for i in range(m + 1)]
for i in range(1, m + 1):
for j in range(1, n + 1):
dp[i][j] = dp[i - 1][j - 1] + 1 if a[i - 1] == b[j - 1] else max(dp[i][j - 1], dp[i - 1][j])
return dp[-1][-1]
Copy The Code &
Try With Live Editor
Input
Output
#3 Code Example with C# Programming
Code -
C# Programming
using System;
namespace LeetCode
{
public class _1143_LongestCommonSubsequence
{
public int LongestCommonSubsequence(string text1, string text2)
{
if (text1.Length > text2.Length) return LongestCommonSubsequence(text2, text1);
var dp = new int[text1.Length + 1];
for (int j = text2.Length - 1; j >= 0; j--)
{
int[] current = new int[text1.Length + 1];
for (int i = text1.Length - 1; i >= 0; i--)
{
if (text1[i] == text2[j])
current[i] = dp[i + 1] + 1;
else
current[i] = Math.Max(current[i + 1], dp[i]);
}
dp = current;
}
return dp[0];
}
}
}
Copy The Code &
Try With Live Editor
Input
Output