

递归优化 @cache
每个算一次:状态数 = m × n , 时间复杂度 = O(m × n)
空间复杂度 O(m × n)
python
class Solution:
def longestCommonSubsequence(self, text1: str, text2: str) -> int:
# 可以跳着选(不连续),但顺序不能变
@cache
def dfs(i, j):
# 任意一个走到头
if i == len(text1) or j == len(text2):
return 0
# 相等 → 一起走
if text1[i] == text2[j]:
return 1 + dfs(i + 1, j + 1)
# 不等 → 各走一步,取最大
return max(
dfs(i + 1, j), # 跳过 text1[i]
dfs(i, j + 1) # 跳过 text2[j]
)
return dfs(0, 0) # 两个指针 i, j:两个数组都从0开始走