原題鏈結
題目描述
給定兩個字串str1和str2,輸出連個字串的最長公共子串行。如過最長公共子串行為空,則輸出-1。
輸入描述:
輸出包括兩行,第一行代表字串str1,第二行代表str2。( 1<= length(str1),length(str2)<= 5000)
輸出描述:
輸出一行,代表他們最長公共子串行。如果公共子串行的長度為空,則輸出-1。
示例1輸入
1a2c3d4b56
b1d23ca45b6a
輸出
123456
說明
"123456"和「12c4b6」都是最長公共子串行,任意輸出乙個。
備註:
時間複雜度o(nm)o(n∗m),空間複雜度o(nm)o(n∗m)。(n,m分別表示兩個字串長度)
#include
#define x first
#define y second
#define send string::nops
using
namespace std;
typedef
long
long ll;
const
int n =
1e4+10;
const
int m =
3* n;
const
int inf =
0x3f3f3f3f
;typedef pair<
int,
int> pii;
int f[n]
[n],path[n]
[n];
//path用來記錄dp路徑
intmain()
}}int a = str1.
size()
-1,b = str2.
size()
-1; vector<
char
>res;
while
(a >
0&& b >0)
reverse
(res.
begin()
,res.
end())
;if(res.
size()
==0)for
(int i =
0;i < res.
size()
;i ++
)cout<;return0;
}
洛谷 1439 最長公共子串行
題目描述 給出1 n的兩個排列p1和p2,求它們的最長公共子串行。輸入格式 第一行是乙個數n,接下來兩行,每行為n個數,為自然數1 n的乙個排列。輸出格式 乙個數,即最長公共子串行的長度 輸入輸出樣例 輸入 1 53 2 1 4 5 1 2 3 4 5 輸出 1 3說明 提示 資料規模 對於50 的...
最長公共子串行 最長公共子串
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...
最長公共子串行 最長公共子串
1.區別 找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。而最長公共子串行則並不要求連續。2 最長公共子串 其實這是乙個序貫決策問題,可以用動態規劃來求解。我們採用乙個二維矩陣來記錄中間的結果。這個二維矩陣怎麼構造呢?直接舉個例子吧 bab 和 caba 當然我們現在一眼就可以看出來最長公...