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]