輸入:兩個字符串A和B.找到一組使用後綴數組兩個輸入串的重複的,不重疊的子串的
輸出:一組重複的,非重疊的子串
我必須找到的所有重複的字符串,每個字符串必須在兩個(!)字符串中至少出現一次。例如,讓
A =「xyabcxeeeyeyabczeee」和B =「yxabcxabee」。
然後一個有效的輸出是{「ABCX」,「AB」,「EE」},而不是「EEE」,因爲它僅發生在串A.
我覺得這個問題是非常相關「超級重複」問題。下面是一個定義:
最大重複對: 一對相同的子α和β的S中,使得在任一方向延伸的α和β 會破壞兩個串 它表示爲一個的平等三重態(位置1,位置2,長度)
最大重複次數: 「在S中出現在最大對中的S的子串」。例如:S = xabcyiiizabcqabcyrxar中的abc。 注意:可以有多個最大重複對,但是最大重複數只能是有限的 。
Supermaximal重複 實施例「永不發生任何其它最大重複的子串的最大重複」:abcy在S = xabcyiiizabcqabcyrxar。
查找所有超最大重複的算法在「算法關於字符串,樹和序列」中描述,但僅限於後綴樹。
它的工作原理: 1)發現使用DFS
對於S,S中的每個位置i的所有左多樣節點第(i-1)被稱爲左字符I。 T(S)中葉的左字符是由該葉代表的後綴位置 的左字符。 如果v的 子樹中的至少兩個葉子具有不同的左字符,則T(S)中的內部節點v被稱爲左多樣化。
2)這些節點上的應用定理7.12.4:
阿左多樣化內部節點v表示當且僅當 所有的V的孩子都是葉子supermaximal重複一個,每個都有一個明顯的左字符
兩個字符串A和B可能已經被連接在一起,當我們查看v的葉子 在第二步中,我們還必須施加額外的限制,即必須有 字符串A和B中至少有一個不同的左字符。這可以通過將它們的位置與A的長度進行比較來完成。如果位置(左字符)>長度(A),則左字符在A中,否則在B中。
你能幫我解決後綴+ lcp數組這個問題嗎?