簡體   English   中英

從子串列表中獲取字符串

[英]getting a string from a list of substrings

我要求在編程競賽中解決以下問題(facebook招聘)

輸入:子字符串列表:

{"bar","foo","hi"} //from 1 to 100 sub-strings 

和句子:

"hellothisisfoobarhi" //from 1 to 1000000 character

輸出:12 //句子中第一個匹配的索引(foo)

另一個例子是:

子字符串:{“喜”,“喜”}

句子:“hiJonIamSayinghihiforYou”

輸出:15 // hi的索引,第二個'hi',因為第一個'hi'只是一個技巧,sub-sentece是'hi'hi“

還有一個例子:

子字符串:{“喜”,“福”}

句子:“sayfoohi”

輸出:6 //順序無關緊要,它們只需要彼此相鄰

誰知道這個問題的好算法?

構造大字符串的后綴樹 - 樹的構造是O(n),其中n是大字符串的長度。

現在你可以在O(m)時間內找到任何子串的位置(其中m是子串的長度),只需通過樹中的子串向下 - 子串結束的節點或葉子將保持鍵對應的索引進入大字符串。

瀏覽一下子串,找到它們在大字符串中的位置,跟蹤最小索引。

另一種方式 - 專注於子串而不是主串 - 將是http://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_string_matching_algorithm

暫無
暫無

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

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