免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

最長公共子串問題

我的解題思路:

創新互聯建站專注于呼蘭企業網站建設,成都響應式網站建設公司,商城網站建設。呼蘭網站建設公司,為呼蘭等地區提供建站服務。全流程按需求定制設計,專業設計,全程項目跟蹤,創新互聯建站專業和態度為您提供的服務

   生成動態規劃表,即大小為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;

}

如果哪位大神還有更好的方法請給小生說下,謝謝啦

網站名稱:最長公共子串問題
網頁地址:http://m.newbst.com/article28/jegccp.html

成都網站建設公司_創新互聯,為您提供網站策劃、網站維護、微信公眾號、網頁設計公司搜索引擎優化品牌網站設計

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站托管運營