給定一串字符串,我需要找到那些匹配了3種模式,其中:搜索模式匹配的字符串「ABC:*:XYZ」在不到爲O(n)
- 前綴搜索 - ABC *
- 水珠狀花紋 - ABC:*:XYZ
- 後綴搜索 - * XYZ
其中*是一個通配符(和可匹配任何數目的字符)。
現在,簡單的解決方案就是掃描每個字符串並查看它是否與目標模式相匹配。但是這是O(n)。如果我將字符串存儲在平衡搜索樹中,則可以在O(log n)中執行前綴查詢。如果我創建了一個所有字符串基本顛倒的樹,我可以在O(log n)中執行後綴查詢。有沒有一種巧妙的方法可以高效地搜索「abc:*:xyz」模式?
如果您有解決方案的第一個和最後一個案例,那麼你有一個解決方案的中間情況。爲什麼中間字符是什麼?只需應用第一個解決方案,然後應用最後一個解決方案,如果他們都工作,那麼您就匹配了中間情況。它也是O(1)(如果你使用的是「pascal strings」 - 除C之外的其他所有內容) – Pod 2009-06-05 08:24:25
@Pod,對於給定的字符串,它可能是O(1),但N是字符串的數量,因此O(N)。 – paxdiablo 2009-06-05 08:26:25