Ideas : dynamic programming
dp[i][j]
represents text1 front i
before text2 and number of j
common subsequence number.
Time complexity: O (n- 2 )
Complexity Space: O (mn)
def longestCommonSubsequence(str1, str2) -> int:
m, n = len(str1), len(str2)
dp = [[0] * (n + 1) for _ in range(m + 1)] # 初始值
for i in range(1, m + 1):
for j in range(1, n + 1):
if str1[i - 1] == str2[j - 1]:
dp[i][j] = 1 + dp[i-1][j-1]
else:
dp[i][j] = max(dp[i-1][j], dp[i][j-1])
return dp[-1][-1]