时间复杂度:O(mn) 其中 m 和 n 分别是两个字符串的长度。 空间复杂度:O(mn) */ classSolution { public: intlongestCommonSubsequence(string text1, string text2){ int m = text1.size(), n = text2.size(); if (m == 0 || n == 0) { return0; }
// f[i][j] 表示 text1[...i] 和 text2[...j] 最长公共子序列的长度 vector<vector<int>> f(m+1, vector<int>(n+1)); // 状态初始化 for (int i = 0; i <= m; i++) { f[i][0] = 0; } for (int i = 0; i <= n; i++) { f[0][i] = 0; }
// 状态计算 for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { 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]); } } }
for (int i = 0; i < text1_cases.size(); i++) { string text1 = text1_cases[i]; string text2 = text2_cases[i]; int result = solution.longestCommonSubsequence(text1, text2);