题解 | #最长公共子序列(二)#
最长公共子序列(二)
https://www.nowcoder.com/practice/6d29638c85bb4ffd80c020fe244baf11
class Solution { public: string LCS(string s1, string s2) { int n = s1.length(), m = s2.length(); if (s1.empty() || s2.empty()) return "-1"; vector<vector<int>> dp(n + 1, vector<int>(m + 1)); string res; for(int i = 1; i <= n; ++ i){ for(int j = 1; j <= m; ++ j){ dp[i][j] = (s1[i - 1] == s2[j - 1]) ? 1 + dp[i- 1][j - 1] : max(dp[i][j - 1], dp[i - 1][j]); } } for(int i = n, j = m; dp[i][j] > 0; ){ if(s1[i - 1] == s2[j - 1]){ res += s1[i - 1]; i --; j --; }else if(dp[i - 1][j] >= dp[i][j - 1]){ i --; }else{ j --; } } reverse(res.begin(), res.end()); return res != "" ? res : "-1"; } };