洛谷 最長公共子串

2021-10-22 16:28:51 字數 1351 閱讀 2765

原題鏈結

題目描述

給定兩個字串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 當然我們現在一眼就可以看出來最長公...