新水果取名(動態規劃,求兩個子串行的最短原序列)

2021-10-23 06:27:12 字數 1492 閱讀 2715

題目內容:

兩種水果雜交出一種新水果,現在給新水果取名,要求這個名字中包含以前兩種水果的字母,且名字盡量短,即:以前的水果名字arr1、arr2是新水果名arr12的子串行,使用動態規劃的思想設計演算法得到新水果名arr12。

輸入格式:

以空格分開兩個水果的名字

輸出格式:

新水果的名字

設計思想

採用動態規劃的思想。根據題意,我是目標是求解2個子序列(fruita,fruitb)的最短原序列(fruit)。該如何實現呢?

1,求解出兩種水果名(fruita,fruitb)最長公共子串行。

使用動態規劃的思想,演算法思想是學習的另一位博主的文章,附上鏈結。

2,在fruita的基礎上拼接fruitb中不是公共子串行的字元。

拼接方法:

(1),fruita+fruitb中公共子串行最後乙個字元後的字元

(2),fruita+fruitb中公共子系列之間的字元,如下形式

aceabde

acbde

(3),fruitb中公共子串行第乙個字元前的字元+fruita

#include

#include

using

namespace std;

intmain()

int legth = assist[m]

[n];

//子串行長度

int* p =

newint

[legth]

;//fruita子串行下標

int* q =

newint

[legth]

;//fruitb子串行下標

int k = legth -1;

//由後向前記錄下標

//分別用p,q記錄記錄fruita,fruitb中子序列下標

for(

int i = m, j = n; i >

0&& j >0;

)else

if(assist[i]

[j]== assist[i -1]

[j])

else

}//用fruita初始化fruit並連線fruitb子串行後尾部

fruit = fruita + fruitb.

substr

(q[legth -1]

, n - q[legth -1]

);//連線子序列中間字元

for(

int i = legth -

1; i >1;

)}//拼接fruitb子串行前頭部

fruit = fruitb.

substr(0

, q[0]

-1)+ fruit;

cout << fruit;

return0;

}

求列表中兩個子串行之差最小的序列

def mean sorted list 題目 將乙個序列分成兩個子串行,確保兩者之間的差值最小 實現 1.對列表排序 2.遞迴列表 取出 1位置元素作為big,2 位置元素作為small,從前到後,切到 2位置 不包括 3.遞迴結束條件 傳入的引數為空,開始遞迴退層 4.乙個大列表b list,和...

阿里筆試題 求兩個子串行的最大連續子串行

給定乙個query和乙個text,均由小寫字母組成。要求在text中找出以相同的順序連續出如今query中的最長連續字母序列的長度。比如。query為 acbac text為 acaccbabb 那麼text中的 cba 為最長的連續出如今query中的字母序列,因此。返回結果應該為其長度3。請注意...

191 乘積最大子串行 兩個最值型動態規劃

中文english 找出乙個序列中乘積最大的連續子串行 至少包含乙個數 樣例 1 輸入 2,3,2,4 輸出 6樣例 2 輸入 1,2,4,1 輸出 8 陣列長度不超過20000 乘積最大的子串行的積,小於2147483647 輸入測試資料 每行乙個引數 如何理解測試資料?class solutio...