簡體   English   中英

大量字符串中最長的子字符串

[英]Longest substring in a large set of strings

我有一個龐大的固定文本字符串庫,並且經常更改輸入字符串s。 我需要在最短的時間內從字符串s的開頭開始,找到庫中任何字符串到s的最長匹配子字符串。 在一個完美的世界中,我還將返回庫中的下一個最長匹配,以及下一個最佳匹配,依此類推。 這不是最長的公共字符串問題-我不是在尋找庫中所有字符串的最長的公共字符串...我只需要s和龐大的庫中的每個字符串之間盡可能快的成對最佳子字符串。

重新閱讀后,我認為做到這一點的最佳方法可能是在大型字符串庫中構建一個trie或前綴樹,然后將s與之匹配。

這有兩個優點。 首先,它以(至少某種程度上)壓縮形式存儲您的大庫。 其次,它或多或少會自動告訴您所有與給定輸入匹配的字符串,而不僅僅是最長的字符串。

它也非常適合您的用例-盡管需要花費大量工作才能從輸入中構建特里樹(或特別是)構建前綴樹,但是之后使用起來非常快。

提前對列表進行排序(即在編譯之前或之前),然后使用bsearch

http://www.cplusplus.com/reference/clibrary/cstdlib/bsearch/

找到匹配項后,您就可以在附近向前和向后看,以獲得所需的“匹配項”。

順便說一句,bsearch不一定是最快的,因為它通過了比較器功能,但是在標准C庫中。

暫無
暫無

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

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