码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-09-21 21:00:31      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   ar   for   div   sp   log   c   

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

标签:style   blog   color   ar   for   div   sp   log   c   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!