2012-07-19 102 views
0

我發現了許多關於如何匹配字符串中的多個模式的解決方案,但沒有找到如何在多個單詞中匹配單個字符串。在多個單詞中匹配一個字符串

到目前爲止,我知道的最好的方法是對每個單詞使用KMP算法,但這並不是如此高效(複雜性=單詞長度的總和),所以我正在尋找一些更好的算法來做所以。

回答

2

你從根本上誤解了這個問題。您可以輕鬆地將問題分解爲查找單詞中所有出現的字符串。這是通過將每個單獨的字符串組合成一個大字符串(或字)來完成的。然後你可以迭代這個較大的字符串一次,並使用一個有效的算法,如KMP或正則表達式(不一定建議使用正則表達式)。一個例子來說明我的意思:

List<String> stringList = new ArrayList<String>(); 

    String first = "abc"; 
    String second = "def"; 
    String third = "xyz"; 
    stringList.add(first); 
    stringList.add(second); 
    stringList.add(third); 

for(String string : stringList) 
{ 
    kmp(string); 
} 

等同於以下內容:

List<String> stringList = new ArrayList<String>(); 
stringList.add("abcdefxyz"); 
for(String string : stringList) 
{ 
    kmp(string); 
} 

正如凱文在評論中指出,使用一個分隔符的位置會防止產生不正確的結果。

+1

但這又如何:單詞「貓」不能在「基本」或「原子」中找到;但它可以在組合字符串「basicatom」中找到。所以你的兩個代碼示例並不完全相同。 – Kevin 2012-07-19 12:27:20

+0

@Kevin肯定我會承認這一點,添加一個分隔符可以解決這個問題 – Woot4Moo 2012-07-19 12:39:00

+0

到目前爲止我發現的是: – 2012-07-20 12:50:56

相關問題