阿里筆試題:給定乙個 query 和乙個 text,均由小寫字母組成。要求在 text 中找出以同樣的順序連 續出現在 query 中的最長連續字母序列的長度。例如, query 為「acbac」,text 為 「acaccbabb」,那麼 text 中的「cba」為最長的連續出現在 query 中的字母序列,因此, 返回結果應該為其長度 3。請注意程式效率。
思路:首先逐個比較兩個字串,建立關係二維表,然後用適當的方法搜尋關係二維表,得到最長公共子串。根據比較的原則,公共連續子串都是沿著二維表對角線方向出現的,所以當有相同的字元出現後就在原基礎上加1,並儲存在二維表中,出現不同字元時就置0,因為這已經不連續了。
它的公式就是這樣,應該可以說這是乙個動態規劃的方法。
最後只要在這個二維表中找到最大的值即為最長連續公共子串行的長度了,同樣依序也可輸出這個序列。
參考**如下:
package test;
public
class test
public
static
void
main(string args)
}
求公共最長子序列
最長公共子串行的問題常用於解決字串的相似度,是乙個非常實用的演算法,作為碼農,此演算法是我們的必備基本功。二 概念 舉個例子,cnblogs 這個字串中子序列有多少個呢?很顯然有2 7個,比如其中的cb,cgs等等都是其子序列,我們可以看出 子串行不見得一定是連續的,連續的那是子串。在你找出的公共子...
最長公共子串行 最長連續公共子串行 最長遞增子串行
面試中除了排序問題,還會經常出現字串的子串行問題,這裡講解使用動態規劃解決三個常見的子串行問題 1 最長公共子串行問題 lcs,longest common subsequence problem 2 最長連續公共子串行問題 3 最長遞增子串行 lis,longest increment subse...
最長公共連續子串和最長連續公共子串行
用二維陣列c i j 記錄串x1 x2 x i x1x2 xi與y 1y 2 y j y1y2 yj 的lcs長度,則可得到狀態轉移方程c i,j 0c i 1 j 1 1max c i,j 1 c i 1,j i 0 orj 0i,j 0a ndxi y j i,j 0a ndxi y j pub...