题目:longestCommonSubsequence
要求:
给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。
样例:
给出”ABCD” 和 “EDCA”,这个LCS是 “A” (或 D或C),返回1
给出 “ABCD” 和 “EACB”,这个LCS是”AC”返回 2
算法要求:
无
解题思路:
dp[i][j]数组存的是从str[0]到str[i]与str2[0]到str2[j]之间公共的子序列的长度
算法如下:
int longestCommonSubsequence(string str, string str2) {
// write your code here
int dp[101][101] = {0};
int size = str.length();
int size2 = str2.length();
for (int i = 0; i < size; i++) {
for (int j = 0; j < size2; j++) {
if (str[i] == str2[j]) {
dp[i + 1][j + 1] = dp[i][j] + 1;
} else {
dp[i + 1][j + 1] = max(dp[i][j + 1], dp[i + 1][j]);
}
}
}
return dp[size][size2];
}