## Description

Given two strings *text1* and *text2*, return the length of their longest common subsequence.

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. (eg, “ace” is a subsequence of “abcde” while “aec” is not). A common subsequence of two strings is a subsequence that is common to both strings.

If there is no common subsequence, return `0`

.

## Solution

Other solutions can be found on the LeetCode link above.

```
class Solution:
def __init__(self):
self.matrix = {}
def longestCommonSubsequence(self, P: str, Q: str) -> int:
n = len(P)
m = len(Q)
result = 0
keyy = f'{n - 1},{m - 1}'
if keyy in self.matrix.keys():
return self.matrix[keyy]
# BASE CASE
if n == 0 or m == 0:
result = 0
# CASE 1
elif P[n - 1] == Q[m - 1]:
result = 1 + self.longestCommonSubsequence(P[:-1], Q[:-1])
# CASE 2
elif P[n - 1] != Q[m - 1]:
tmp1 = self.longestCommonSubsequence(P[:-1], Q)
tmp2 = self.longestCommonSubsequence(P, Q[:-1])
result = max(tmp1, tmp2)
self.matrix[f'{n - 1},{m - 1}'] = result
return result
```