LC 速查

HOT 100索引 › B16 多维动态规划 Multi-dimensional DP

LC 1143最长公共子序列Longest Common Subsequence 中等

求两个字符串的最长公共子序列(不要求连续)的长度。

思路 经典二维 LCS:字符相等取左上 +1,否则取上方与左方的较大值。时间 O(mn)。

class Solution:
    def longestCommonSubsequence(self, text1: str,
                                 text2: str) -> int:
        m, n = len(text1), len(text2)
        f = [[0] * (n + 1) for _ in range(m + 1)]
        for i in range(1, m + 1):
            for j in range(1, n + 1):
                if text1[i - 1] == text2[j - 1]:
                    f[i][j] = f[i - 1][j - 1] + 1
                else:
                    f[i][j] = max(f[i - 1][j], f[i][j - 1])
        return f[m][n]
← 上一题 最长回文子串编辑距离 下一题 →