簡體   English   中英

如何查找字符串列表中所有常見的最長子字符串

[英]How to find all common longest substrings of a list of strings

我有一個字符串列表,我需要為其找到所有具有最小長度的所有常見唯一子字符串(實際上是路徑)。 例:

/a/b/c

/a/b

/a

/d/e/f

/d/e

/g/h

對於此輸入,我需要以下結果:

/a

/d/e

/g/h

如您所見,我需要具有唯一前綴的最小長度的路徑(或子字符串)。 / a是所有以/ a開頭的路徑的最小子字符串。 / d / e是所有以/ d / e開頭的路徑的最小子字符串。 / g / h也是如此。

此方法的實際應用是查找其中具有特定文件的路徑樹的所有根,以對其進行進一步分析。 考慮以下示例:

/a/b/c/index.html

/a/b/index.html

/a/index.html

/d/e/f/index.html

/d/e/index.html

/g/h/index.html

假設我想擁有包含index.html文件的最頂層(就根而言)路徑。 結果,我想要“ /a/index.html”、“/d/e/index.html”和“ /g/h/index.html”。

有任何想法嗎? 關於“簡單的”最長公共子串問題,有很多理論和示例,但我還沒有找到有效找到所有公共最長子串的解決方案。

具有偽代碼的解決方案將是高度贊賞的。

現在,通過改進的描述,我認為以下算法可以實現:

  1. 將字符串列表拆分為段列表(字符串數組列表)
  2. 從i = 1開始,並在每次迭代時均增加i(執行第3步和第4步),直到段列表中沒有更多項:
  3. 將所有長度為i的線段數組添加到當前解決方案列表中(如果尚未添加到其中)以及最終解決方案的相應路徑。
  4. 從前i個與當前解決方案中的一個項目相同的細分列表中刪除所有項目(然后重置當前解決方案)。

暫無
暫無

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

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