最長子序列

2021-07-05 14:08:42 字數 755 閱讀 9592

/*在做oj題目的時候,經常會用到字串的處理。例如,比較二個字串相似度。這篇文章介紹一下求兩個字串的最長公共子串行。

乙個字串的子串行,是指從該字串中去掉任意多個字元後剩下的字元在不改變順序的情況下組成的新字串。

最長公共子串行,是指多個字串可具有的長度最大的公共的子串行。*/

#include#includechar a[500],b[500];

char num[501][501]; ///記錄中間結果的陣列

char flag[501][501]; ///標記陣列,用於標識下標的走向,構造出公共子串行

void lcs(); ///動態規劃求解

void getlcs(); ///採用倒推方式求最長公共子串行

int main()

void lcs()

else if(num[i][j-1]>num[i-1][j])

else}}

}void getlcs()

else if(flag[i][j]==2) ///如果是斜向右標記

j--;

else if(flag[i][j]==3) ///如果是斜向下標記

最長子序列

最長子序列可以說是剛接觸動態規劃的人經常遇見也不得不解決的問題,最常見的有兩種,一種是最長公共子串行 lcs 還有乙個是最長上公升子串行 lis 今天我就總結下這兩個的做法。一 最長公共子串行 lcs 題目描述 給你兩個陣列,可以是數字的,也可以是字串,我們假設是數字的!舉個例子 x 1,5,6,4...

最長子序列

題 給定乙個長度為n的陣列,找出乙個最長的單調自增子序列 不一定連續,但是順序不能亂 例如 給定乙個長度為8的陣列a,則其最長的單調遞增子串行為,長度為6。思路1 第一眼看到題目,很多人肯定第一時間想到的是lcs。先給陣列排個序形成新陣列,然後再把新陣列和原陣列拿來求lcs,即可得到答案。這種解法很...

最長子序列

include include includeusing namespace std int f char x,char y return max f x 1,y f x,y 1 int main 乙個串的子串是指該串的乙個連續的區域性。如果不要求連續,則可稱為它的子串行。比如對串 abcdefg ...