Longest Common Subsequence

來源:互聯網
上載者:User
       遞迴的解法是:

#include <stdio.h>

int inline max(int a,int b)
{
        return a >= b ? a : b;
}
int lcs(char * a, int la, char *b, int lb)
{
        if(la < 0 || lb < 0 ) return 0;
        if(a[la] == b[lb]) return 1 + lcs(a,la-1,b,lb-1);
        else return max(lcs(a,la-1,b,lb), lcs(a,la,b,lb-1));
}

int main()
{
        char a[1024];
        char b[1024];
        int la,lb;
        while(1)
        {
                printf(":->");
                if(fgets(a,1024,stdin) <= 0) break;
                la = strlen(a) - 2;
                printf(":->");
                if(fgets(b,1024,stdin) <= 0) break;
                lb = strlen(b) - 2;
                printf(":->Common length is : %d ",lcs(a,la,b,lb));
        }
        //printf("the common length is : %d  ",lcs(a,la,b,lb));
        return 0;
}

    這個解法效率太低,可以採用動態規劃的方法來解決,實現的代碼如下:

#include <stdio.h>
#include <string.h>

int commstr(char *str1, char *str2)
/* 返回str1,str2的最長公用之串長度*/
{
       int len1=strlen(str1),len2=strlen(str2),row,col,max=0;
       int **pf = new int*[len1+1];//動態分配一個二維數組作為輔助空間
       for (row=0; row<len1+1; row++)
              pf[row] = new int[len2+1];
       //數組賦初值
       for (row=0; row<len1+1; row++)
              pf[row][0] = 0;
       for (col=0; col<len2+1; col++)
              pf[0][col] = 0;
      for (row=1; row<=len1; row++)
              for (col=1;col<=len2; col++)
              {
                     if (str1[row-1] == str2[col-1])
                     {
                            pf[row][col] = pf[row-1][col-1] + 1;
                            max = pf[row][col] > max ? pf[row][col] : max;
                     }
                     else
                            pf[row][col] = 0;
              }

       //空間回收    

       for (row=0; row<len1+1; row++)
              delete[] pf[row];
       delete[] pf;
       return max;                  
}

int main(int argc,char **argv)
{
       if (argc >= 3)
       {
         printf("String: 1. %s 2. %s ",argv[1],argv[2]);
          printf(" max substr length:%d ",commstr(argv[1],argv[2]));
       }
       return 0;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.