最長公共子串

Q: 求兩個字符串的最長公共子串的長度
A:動態規劃轉移方程如下:
定義f[m][n] 爲字符串A前m個字符和字符串B前n個字符的最長公共子串的長度,則

if A[m] != B[n]:
f[m][n] = max(f[m-1][n], f[m][n-1])
else if f[m-1][n-1] == 0:
f[m][n] = 1
else if f[m-2][n-2] + 1 == f[m-1][n-1]
f[m][n] = f[m-1][n-1] + 1
else:
f[m][n] = max(f[m-1][n], f[m][n-1])

轉移方程稍顯複雜,將f[m][n]定義爲以A[m],B[n]結尾的公共子串長度,則要簡單許多:

if A[m] != B[n]:
f[m][n] = 0
else:
f[m][n] = f[m-1][n-1] + 1

這樣再遍歷所有的F[m][n]即可求出最長公共子串長度

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章