题目描述:

给定2个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列。

输入:

第一行输入序列X,第二行输入序列Y。

输出:

X和Y的最长公共子序列的长度。

样例输入

abcbdab
bdcaba

样例输出

4

思路:

代码:

#include <iostream>
#include <string.h>
#include <math.h>
 
using namespace std;
 
int main() {
    int c[201][201];
    memset(c,0,sizeof(c));
    int i, j;
    string x, y;
    cin >> x >> y;
    x = " " + x;        //使得字符串x、y从1开始
    y = " " + y;
    int m = x.length(), n = y.length();
    for (i = 1; i <= m; i++) {
        for (j = 1; j <= n; j++) {
            if (x[i] == y[j]) {
                c[i][j] = c[i - 1][j - 1] + 1;      //c[i][j] = c[i-1][j-1]
            } else
                c[i][j] = max(c[i - 1][j], c[i][j - 1]);    //c[i][j] = max(c[i-1)[j],c[i][j-1]
        }
    }
    cout << c[m-1][n-1];
    return 0;
}