首页 > 其他 > 详细

【动态规划】 之最长公共子序列LCS

时间:2014-09-21 19:01:42      阅读:296      评论:0      收藏:0      [点我收藏+]
int lcs_len(char *a, char *b, int c[][N]){
    int aLen=strlen(a),
        bLen=strlen(b),
        i,j;
    for(i=0; i<=aLen; i++)
        c[i][0]=0;
    for(j=1; j<=bLen; j++)
        c[0][j]=0;

    for(i=1;i<=aLen;i++)
        for(j=1;j<=bLen;j++)
            if(a[i-1]==b[j-1])
                c[i][j]=c[i-1][j-1]+1;
            else 
                c[i][j]=MAX( c[i-1][j],c[i][j-1] );
    return c[i][j]; //返回的是长度
}
char *build_LCS(char *s,char *a, char *b){  //重建公共子序列
    int k,i=strlen(a),
        j=strlen(b), c[N][N];

    k=lcs_len(a,b,c);
    //s[k]=‘\0‘;

    while(k>0)
        if(c[i][j]==c[i-1][j])
            i--;
        else if(c[i][j]==c[i][j-1])
            j--;
        else{
            s[--k]=a[i-1];
            i--;
            j--;
        }
        return s;
}

 

【动态规划】 之最长公共子序列LCS

原文:http://www.cnblogs.com/zhangXH/p/3984826.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!