## 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` and `text2` 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 &

Input

cmd
text1 = "abcde", text2 = "ace"

Output

cmd
3

### #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 &

Input

cmd
text1 = "abcde", text2 = "ace"

Output

cmd
3

### #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;
}
}
}
``````
Copy The Code &

Input

cmd
text1 = "abc", text2 = "abc"

Output

cmd
3