Description:
给两个字符串,求二者的最长公共子序列。
Analysis:
子序列:不要求连续
子串:一定要去连续
动态规划经典题目之一,动态规划关键是把问题划分成更小的子问题,更小的子问题可以直接求解,自底向上。
很类似归纳法,找出递推公式。
Solution:
class Solution {
public:
int longestCommonSubsequence(string text1, string text2) {
int len1 = text1.length();
int len2 = text2.length();
int n = len1 + 1;
int m = len2 + 1;
vector<vector<int> > result(n, vector<int>(m));
for (int i = 0; i < n; i ++) {
for (int j = 0; j < m; j ++) {
if (i == 0 || j == 0) {
result[i][j] = 0;
} else if (text1[i - 1] == text2[j - 1]) {
result[i][j] = result[i - 1][j - 1] + 1;
} else {
result[i][j] = max(result[i - 1][j], result[i][j - 1]);
}
}
}
return result[n - 1][m - 1];
}
};