最長公用子串問題

來源:互聯網
上載者:User

標籤:最長公用子串問題

我的解題思路:

   產生動態規劃表,即大小為M*N的矩陣dp(M和N分別是兩個字串的長度);

求dp[i][j]過程:

   1.矩陣第一列即dp[0~M-1][0],對某一個位置(i,0)來說,如果str1[i]==str2[0],令dp[i][0]=1,.否則令dp[i][0]=0;

   2.矩陣第一行即dp[0][0~N-1],對某一個位置(0,j)來說,如果str1[0]==str2[j],令dp[0][j]=1,.否則令dp[i][0]=0;

   3.其餘位置按照從左至右,從上到下位置計算,dp[i][j]的值只可能有兩種情況:

      a.如果str1[i]!=str2[j],說明在必須把str1[i]和str2[j]當做公用子串的最後一個字元是不可能的,令dp[i][j]=0;

      b.如果str1[i]==str2[j],說明str1[i]和str2[j]可以當做公用子串的最後一個字元,dp[i][j]=dp[i-1][j-1]+1;

產生動態規劃表後,表裡面最大的數字就是公用子串的長度


下面是具體的代碼:

#include <iostream>

#include <string>

using namespace std;


int dp[8][8] = { 0 };//二維矩陣大小自己定義,保證能容下字串就行

void initdp(char *str1, char *str2)

{

int len1 = strlen(str1);

int len2 = strlen(str2);

for (int i = 0; i < len1; i++)

{

if (str1[i] == str2[0])

{

dp[i][0] = 1;

}

}


for (int j = 1; j < len2; j++)

{

if (str2[j] == str1[0])

{

dp[0][j] = 1;

}

}


for (int i = 1; i < len1; i++)

{

for (int j = 1; j < len2; j++)

{

if (str1[i] == str2[j])

{

dp[i][j] = dp[i - 1][j - 1] + 1;

}

}

}

}


void MaxChar(char *str1, char *str2)

{

int len1 = strlen(str1);

int len2 = strlen(str2);

int max = 0;

int end = 0;


for (int i = 0; i < len1; i++)

{

for (int j = 0; j < len2; j++)

{

if (dp[i][j]>max)

{

max = dp[i][j];

end = i;

}

}

}


for (int i = end - max+1; i <= end; ++i)

{

printf("%c", str1[i]);

}

printf("\n");

}


int main()

{

char *str1 = "ab123cd";

char *str2 = "db1234cg";

initdp(str1, str2);

MaxChar(str1, str2);

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.