[
dp
dfs
string
]
Leetcode 1143 Longest Common Subsequence
Problem statement
https://leetcode.com/problems/longest-common-subsequence/
Solution
See also very similar Problem 0583 Delete Operation for Two Strings. The logic here is almost the same.
Complexity
Time complexity is O(mn)
, space complexity is O(mn)
as well, which can be reduced to O(m + n)
.
Code
class Solution:
def longestCommonSubsequence(self, text1,text2):
text1 = "!" + text1
text2 = "!" + text2
m, n = len(text1), len(text2)
dp = [[0] * n for _ in range(m)]
dp[0][0] = 1
for i, j in product(range(m), range(n)):
if text1[i] == text2[j]:
dp[i][j] = dp[i-1][j-1] + 1
else:
dp[i][j] = max(dp[i-1][j], dp[i][j-1])
return dp[-1][-1] - 1