簡體   English   中英

2個字符串實現中最長的公共子字符串

[英]Longest common substring of 2 strings implementation

我正在嘗試在C中實現最長的通用子字符串算法 ,在閱讀了下面的文章之后,我對以下部分感到非常困惑:

現在,最大值是LCP [2] = 3,但這是針對SA [1]和SA [2]的,它們都以字符串A開頭。因此,我們忽略了它們。 另一方面,LCP [4] = 2用於SA [3](對應於B的后綴bc)和SA [4](對應於A的后綴bcabc#bc)。 因此,這是最長的公共子字符串。

我的LCP結果也與發布示例不同。

https://cs.stackexchange.com/questions/9555/computing-the-longest-common-substring-of-two-strings-using-suffix-arrays

字符串A = abcabc

字符串B = bc

字符串分隔符:“#”

后綴數組

[#bc,abc#bc,abcabc#bc,bc,bc#bc,bcabc#bc,c,c#bc,cabc#bc]

LCP

[-1,0,3,0,2,2,2,0,1,1]

或刪除第一個元素

后綴數組

[abc#bc,abcabc#bc,bc,bc#bc,bcabc#bc,c,c#bc,cabc#bc]

LCP

[0,3,0,2,2,2,0,1,1]

我看到SA [3]對應於bc ,但SA [4]對應於#bcbc (我想)。 所以,這就是令我困惑的地方。

任何人都可以澄清嗎? 謝謝!

我看到SA [3]對應於bc,但SA [4]對應(我想)對應於#bcbc。

在上面的任何地方都找不到#bcbc。 引號說:“ SA [4](對應於A的后綴bcabc#bc)”,這確實是正確的:

 0       1          2   3      4         5  6     7        index
[abc#bc, abcabc#bc, bc, bc#bc, bcabc#bc, c, c#bc, cabc#bc] Suffix Array
[0,      3,         0,  2,     2,        0, 1,    1]       LCP

SA [2]是B的后綴,而SA [3]是A(#B)的后綴,因此最長的公共子字符串是bc,長度為2。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM