題目內容:
兩種水果雜交出一種新水果,現在給新水果取名,要求這個名字中包含以前兩種水果的字母,且名字盡量短,即:以前的水果名字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...