给出两个字符串,求它们的最长公共子序列。
a={ATCGATCC}
b={ATCCATCG}
#include<stdio.h>
int max(int a,int b){
if(a>b)
return a;
else
return b;
}
int main(){
char a[9],b[9];
gets(a);
gets(b);
int opt[9][9];
int i,j;
for(i=0;i<9;i++){
opt[0][i]=0;
opt[i][0]=0;
}
for(i=0;i<9;i++){
for(j=0;j<9;j++){
if(i==0||j==0){
opt[i][j]=0;
}
if(i>0&&j>0&&a[i]==b[j]){
opt[i][j]=opt[i-1][j-1]+1;
}
if(i>0&&j>0&&a[i]!=b[j]){
opt[i][j]=max(opt[i][j-1],opt[i-1][j]);
}
}
}
for(i=0;i<9;i++){
if(i==0)
printf(" %c ",a[i]);
else
printf("%c ",a[i]);
}
printf("\n");
for(i=0;i<9;i++){
if(i==0)
printf(" ");
for(j=0;j<9;j++){
printf("%d ",opt[i][j]);
}
printf("\n");
printf("%c ",b[i]);
}
return 0;
}
可以看到最长公共子序列为:ATGATC