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...