#include <iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<sstream>
using namespace std;
#define L 101
const int AL=7;
const int BL=6;
int f[L][L];
char z[L][L][L]; //1维char存储1个string,2维char存储1维string,3维char存储2维string
string t="";// 临时存储strcat()
stringstream tt;
char a[AL+2]=".ABCBDAB";
char b[BL+2]=".BDCABA";
int main()
{
//f[i][j]边界为0
for(int i=1;i<=AL;i++){
for(int j=1;j<=BL;j++){
if(a[i]==b[j]){
f[i][j] = f[i-1][j-1]+1; //去掉后求,再补上最后一个公共的
tt.clear();
t="";
tt << z[i-1][j-1];
tt >> t;
t+=a[i];
strcpy(z[i][j],t.c_str()); //添加公共再存量
//cout << z[i][j];
}else{
if(f[i-1][j] > f[i][j-1]){ //去掉也无妨
strcpy(z[i][j],z[i-1][j]);
f[i][j] = f[i-1][j];
}else{
strcpy(z[i][j],z[i][j-1]);
f[i][j] = f[i][j-1];
}
}
}
}
cout << f[AL][BL] << endl << z[AL][BL];
/*tt << "lalal";
tt >> t;
tt.clear();
t="";
tt << "fa";
tt >> t;
t = tt.str();
cout << t;*/
return 0;
}
//cout << "输入:"
练习1 - 公共子序列
最新推荐文章于 2021-11-25 14:31:19 发布