这就是王晓东那书后的一个习题,以后大家可以一起看那书,然后讨论,如果把那书的题给全杀了,估计就很猛了
while((c=getchar())!='\n')
{
a[i]=c;
i++;
}
a[i]='\0';
while((c=getchar())!='\n')
{
b[j]=c;
j++;
}
b[j]='\0';
int m=i-1,n=j-1;
printf("%d,%d\n",m,n);
edit_length(m,n,a,b);//计算最长公共子序列的长度
int num=0;//存放计算的结果
if(m<=n){
num=n-cc[m][n];
}
else{
int k1=0,k2=0;
int flag=1;//标志,跳出双重循环
for (k1=1;flag&&k1<=m;k1++)
for (k2=1;flag&&k2<=n;k2++){
if(bb[k1][k2]==1)
flag=0;//跳出
}
if ((m-k1)>=(n-k2)) {
num=m-cc[m][n];
}
else{
int temp=k1-cc[m][n]+n-k2;
num=temp>m?m:temp;
}
}
printf("%d\n",num);
return 0;
int i,j;
for(i=1;i<=m;i++) cc[i][0]=0;
for(j=1;j<=n;j++) cc[0][j]=0;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
if(a[i]==b[j])
{cc[i][j]=cc[i-1][j-1]+1;bb[i][j]=1;}
else if(cc[i-1][j]>=cc[i][j-1])
{cc[i][j]=cc[i-1][j];bb[i][j]=2;}
else
{cc[i][j]=cc[i][j-1];bb[i][j]=3;}
}
On Apr 10, 11:28 pm, 李效云 <lixiaoyun...@gmail.com> wrote:
> 恩,怎么说呢,练习练习用动态数组没啥害处的,这样面试的时候,你写出来用动态的总比不用动态的好吧,
> 要习惯了,即使用了malloc,也就是1-2分钟的事情,没啥。
> 闲麻烦用STL里的VECTOR啊,这个挺好是,而且STL都很高效的,还是熟悉STL,虽然用VECTOR也没啥:(
>
> 2009/4/10 higer <higerinbeij...@gmail.com>