最長公共子串行求解

2021-10-01 08:55:25 字數 396 閱讀 9765

問題描述

求解兩個序列的最長公共子串行,而且這裡的子串行不要求是連續的。

如string a = 「abcdefg」, b = 「adfbcdef」,那麼最長公共子串行應該是abcdef。

求解分析

暴力法求解

通過取得每個序列的所有子串行,如序列a有n個字元,那麼就有2的n次方個子序列,因為對於每個字元來說,都可以選擇或者不選擇兩個選項,所以按照排列(這裡可能不太對,離散和概率論都有講過,高中也有這個知識點)就有2的n次方個子序列。

這個其實是不行的,因為求解的時間複雜度是指數級別。

動態規劃

丟擲乙個疑問,現在有字串a和b,長度分別為m和n。假如a[ m - 1] = b[ n - 1]。那麼最大子串行的最後肯定包含a[ m - 1]。思考一下為什麼?

最長公共子串行求解

求多個字串的最長公共子串行可以轉化為逐步求2個字串的最長公共子串行來求解直至收斂,雖然過程會比較複雜一些。下面的 將採用動態規劃的方法來求解2個字串的最長公共子串行的問題,當然裡面還包含了測試例子 關於本 的詳情解釋請看演算法導論第二版 機械工業出版社 15章動態規劃15.3,看了你再執行 你會更容...

LCS最長公共子串行求解

include stdafx.h include include include include using namespace std int calclcs vectorx,vectory,int lcs,int row,int col int findmax int value1,int va...

最長公共子串行 最長公共子串

1 最長公共子串行 採用動態規劃的思想,用乙個陣列dp i j 記錄a字串中i 1位置到b字串中j 1位置的最長公共子串行,若a i 1 b j 1 那麼dp i j dp i 1 j 1 1,若不相同,那麼dp i j 就是dp i 1 j 和dp i j 1 中的較大者。class lcs el...