思路:动态规划
dp[i][j]
表示text1的前i
个数和text2的前j
个数的公共子序列。
时间复杂度:O(n2)
空间复杂度: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]