最長重複子串(C )

2021-09-25 22:58:38 字數 1066 閱讀 1197

題目描述:

給定兩個字串,求解兩者的最長重複子串(長度),有的最長重複子串不是唯一的,給出乙個最長的即可。

例:abfjgk anrfgll

兩者的最長重複子串為 afg (3)。

演算法點睛思想:

str1前x子串與str2前y子串長度:

c (x

,y)=

c(x-1,y-1)+1, str1[x]=str2[y] \\ max[c(x-1,y),c(x,y-1)], str1[x] \ne str2[y] \end

c(x,y)

=int

longestcommonsubsequence

(char

* text1,

int n,

char

* text2,

int m)

else

else}}

}int length = len[m*

(n+1

)+n]

;int x=m;

int y=n;

char

* res =

newchar

[len[m*

(n+1

)+n]];

int i=0;

while

(i(n+1

)+n]

)else

if(trace[x*

(n+1

)+y]==1

)//上

x-=1;

else

//左 y-=1;

}for

(int i=

0;i(n+1

)+n]

;++i)

cout<<<

",";

cout

] len;

delete[

] trace;

delete[

] res;

return length;

}空間上還有優化空間,待研究。

最長重複子串

首先這是乙個單字串問題。子字串r 在字串l 中至少出現兩次,則稱r 是l 的重複子串。重複子串又分為可重疊重複子串和不可重疊重複子串。方法 kmp演算法求解 在kmp演算法的關鍵就是求解next陣列,針對next j k,可以得到p 0,1,k 1 p j k,j k 1,j 1 看到p 0,1,k...

最長重複子串

思路 使用字尾陣列解決 分析 1 由於要求最長公共子串行,則需要找到字串的所有子串,即通過產生字串的字尾陣列實現。2 由於要求最長的重複子串,則需要對所有子串進行排序,這樣可以把相同的字串排在一起。3 比較 相鄰字串,找出兩個子串中,相同的字元的個數。注意,對於乙個子串,乙個與其重複最多的字串肯定是...

求最長重複子串 和 最長不重複子串 思路

題目 求任意乙個字串中的所有最長重複字串和所有最長不重複子串 最長不重複子串的解法 設定乙個輔助資料結構 如map 記錄每個字元最後一次出現的位置 遍歷字串中的每個字元,如果在map中沒有出現,則不重複子串的長度 1,並更新最大字串的長度值 如果在map中已經出現過,則更新當前字元在map中的位置和...