一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。
例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。
解题思路:
代码如下:
#include <iostream>
#include <cstring>
using namespace std;
string a, b;
const int N = 10010;
int dp[N][N];int main() {while (cin >> a >> b) {memset(dp, 0, sizeof(dp));int len_a = a.length();int len_b = b.length();for (int i = 1; i <= len_a; i++)for (int j = 1; j <= len_b; j++) {if (a[i - 1] == b[j - 1])dp[i][j] = dp[i - 1][j - 1] + 1;elsedp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);}cout << dp[len_a][len_b] << endl;}return 0;
}
参考于<<手写代码必备手册>> 戴方勤