LSC
(1)字符子串:指的是字符串中连续的n个字符.
如abcdefg中,ab,cde,fg等都属于它的字串。
(2)字符子序列:指的是字符串中不一定连续但先后顺序一致的n个字符,即可以去掉字符串中的部分字符,但不可改变其前后顺序。
如abcdefg中,acdg,bdf属于它的子序列,而bac,dbfg则不是,因为它们与字符串的字符顺序不一致。
(3)** 公共子序列**:如果序列C既是序列A的子序列,同时也是序列B的子序列,则称它为序列A和序列B的公共子序列。
如对序列 1,3,5,4,2,6,8,7和序列 1,4,8,6,7,5 来说,序列1,8,7是它们的一个公共子序列。
最长公共子序列(LCS)也不一定唯一。但是对于固定的两个数组,虽然最LCS不一定唯一,但是LCS的长度是一定的
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n;
int a[N],b[N];
int f[N][N];
int main(){
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
for(int i = 1; i <= n; i++) cin >> b[i];
for(int i = 1 ; i <= n; i++){
for(int j = 1; j <= n; j++){
f[i][j] = max(f[i-1][j],f[i][j-1]);
if(a[i] == b[j]) f[i][j] = max(f[i][j],f[i-1][j-1] + 1);
}
}
cout << f[n][n];
return 0;
}

浙公网安备 33010602011771号