动态规划
class Solution:
def longestCommonSubsequence(self, text1, text2):
size1 = len(text1) + 1
size2 = len(text2) + 1
dp = [[0] * size2 for _ in range(size1)]
for i in range(1, size1):
for j in range(1, size2):
if text1[i - 1] == text2[j - 1]:
dp[i][j] = dp[i - 1][j - 1] + 1
else:
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
return dp[size1 - 1][size2 - 1]
二维dp(初始值设为0,在前面增加一圈边界,到第0位之前长度为0)
dp[i][j]状态 表示到第text1的第i位、到text2的第j位为止,最长公共子序列的长度。
--从0到size1遍历i
--从0到size2遍历j
--如果text1的第i位与text2的第j位相同
--dp[i][j] = dp[i-1][j-1] + 1(长度为到i-1和j-1位时的最长公共子序列+1)
--反之
--dp[i][j]为分别到i-1和j位、到i和j-1位的较大值