アイデア:動的なプログラミングは、
dp[i][j]
テキスト1、フロントを表しi
テキスト2]との番号の前にj
共通のサブシーケンス番号。
時間の複雑さ:O(N- 2)
複雑スペース: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]