[英]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.