最長公共子字串 動態規劃

2021-05-28 00:41:28 字數 1263 閱讀 1278

x =

y =

x和y的longest common substring為 長度為2

動態規劃解法

c[i][j]表示x

0...xi和y

0...yj的最大substringx

i=yj

)的長度,比如

x =

y =

c[1][1] = 1

c[2][2] = 2

c[3][3] = 0

c[4][4] = 1

動態轉移方程為:

如果xi == yj, 則 c[i][j] = c[i-1][j-1]+1

如果xi ! = yj,  那麼c[i][j] = 0

最後求longest common substring的長度等於

max完整的**如下:

view plain

/** 

找出兩個字串的最長公共連續子串的長度

** author :liuzhiwei  

** data   :2011-08-16

**/#include "stdio.h"

#include "string.h"

#include "stdlib.h"

intlongest_common_substring(

char

*str1, 

char

*str2)  

}  }  //輸出公共子串

char

s[1000];  

k=max;  

i=x-1,j=y-1;  

s[k--]='\0'

;  while

(i>=0 && j>=0)  

else

//只要有乙個不相等,就說明相等的公共字元斷了,不連續了

break

;  }  

printf("最長公共子串為:"

);  

puts(s);  

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

//釋放動態申請的二維陣列

delete

c[i];  

delete

c;  

return

max;  

}  int

main(

void

)    

最長公共子串 最長公共子串 動態規劃

有兩個字串 可能包含空格 請找出其中最長的公共連續子串,輸出其長度。長度在1000以內 例如 輸入 abcde bcd 輸出 3 1 把兩個字串分別以行和列組成乙個二維矩陣。2 比較二維矩陣中每個點對應行列字元中否相等,相等的話值設定為1,否則設定為0。3 通過查詢出值為1的最長對角線就能找到最長公...

最長公共字串(動態規劃)

題目 給定兩個字串 str1 和 str2,返回兩個字串的最長公共子串。舉例 str1 1ad12345cd str2 12345ef 返回 12345 要求 如果str1 長度為m,str2長度為n,實現時間複雜度為o m n 額外空間複雜度 為o 1 的方法。實現 include include...

動態規劃 最長公共字串

思想 首先通過構造二維陣列,較長字串a作為行,較短字串b作為列。將第一行和第一列初始化全初始化為1,通過遞推式,如果當前兩個字串相等,則為左上角的數字加1,否則為0。找出最大的數字,最大的數字表示公共字串的長度。找出公共字串在字串a的角標,從後往前數公共字串個長度即為公共字串。word a yawi...