演算法競賽 day9(最長公共子串行 LCS )

2021-10-07 20:15:23 字數 1559 閱讀 5447

世間上本沒有路,走的人多了,也便就有了路。。。

不要想一次就把一樣東西搞得通透和全面,在處理某些事情的時候,我們只能盡自己的所能,如果錯過了最佳補救的時間,那就下次,或者接著補全,不要重新翻到過去重新再來一遍,那樣會適得其反,總之,一次不行,那就多來幾輪,總會越來越好的,路就是這樣慢慢走出來的。。。

最經典的dp問題之一

//#include

#include

#include

#include

#include

using

namespace std;

void

lcs(string s1,string s2)

}for

(int i=

0;i)for

(int i=

0;i)for

(int i=

0;i1;i++

)else

if(c[i]

[j+1

]>=c[i+1]

[j])

else}}

for(

int i=

0;i)printf

("\n");

} stack<

char

>same;

//存lcs字元

stack<

int>same1,same2;

//存lcs字元在字串1和字串2中對應的下標,方便顯示出來

for(

int i=m-

1,j=n-

1;i>=

0&&j>=0;

)else

if(b[i]

[j]==2)

else

}printf

("%s\n"

,s1.

c_str()

);//輸出字串 1

for(

int i=

0;i!same1.

empty()

;i++

)else

}printf

("\n%s\n"

,s2.

c_str()

);//輸出字串 2

for(

int i=

0;i!same2.

empty()

;i++

)else

}printf

("\n最長公共子串行為:");

while

(!same.

empty()

)printf

("\n長度為:%d\n"

,c[m-1]

[n-1])

;for

(int i=

0;i)delete

c;delete

b;}int

main()

tips:printf如何輸出string:

在string型別後加上c_str()就可以了。例如:printf("%s\n",s1.c_str());

9 最長公共子串行

9.最長公共子串行 description 給定兩個字串,返回兩個字串的最長公共子串行 不是最長公共子字串 可能是多個。input 輸入為兩行,一行乙個字串 output 輸出如果有多個則分為多行,先後順序不影響判斷。sample input 1 1a2bd3g4h56jk 23efg4i5j6k7...

演算法 最長公共子串行

好久沒做演算法題了,現在發現自己的演算法能力非常薄弱,所以特意練練,順便做個筆記方便以後檢視。今天整理一下最長公共子串行,最長公共子串行的問題常用於解決字串的相似度,是乙個非常實用的演算法,作為碼農,此演算法是我們的必備基本功。最長公共子串行,是指兩個字串可具有的長度最大的公共的子串行。聽著好像有點...

演算法 最長公共子串行

題目 給定兩個字串 text1 和 text2,返回這兩個字串的最長公共子串行的長度。乙個字串的 子串行 是指這樣乙個新的字串 它是由原字串在不改變字元的相對順序的情況下刪除某些字元 也可以不刪除任何字元 後組成的新字串。例如,ace 是 abcde 的子串行,但 aec 不是 abcde 的子串行...