leetcode hot100 1143. 最长公共子序列 mediuim 递归优化


递归优化 @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开始走
相关推荐
随便发挥6 分钟前
Leetcode 剑指 Offer II 186. 文物朝代判断
leetcode
6Hzlia17 分钟前
【Classic 150 刷题计划】 LeetCode 205. 同构字符串 | C++ 双向绑定与哈希表映射
c++·算法·leetcode
午彦琳13 小时前
2026.9.17
数据结构·算法·leetcode
木井巳13 小时前
【记忆化搜索】不同路径
java·算法·leetcode·深度优先·剪枝·推荐算法
All for pursuit.16 小时前
【链表-9】146.LRU缓存
数据结构·c++·算法·leetcode
圣保罗的大教堂16 小时前
leetcode 1477. 找两个和为目标值且不重叠的子数组 中等
leetcode
hanlin0317 小时前
刷题笔记:力扣第144题-二叉树的前序遍历
笔记·算法·leetcode
圣保罗的大教堂19 小时前
leetcode 3629. 通过质数传送到达终点的最少跳跃次数 中等
leetcode
圣保罗的大教堂19 小时前
leetcode 1914. 循环轮转矩阵 中等
leetcode
wabs66620 小时前
关于二叉树【力扣100.相同的树的思考】
数据结构·c++·算法·leetcode·二叉树·递归法