题解 | #最长公共子序列(二)#
最长公共子序列(二)
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";
}
};
查看3道真题和解析