2012-02-20 95 views
1

我想確定一個字符串中的未知模式,如String未知模式匹配

s = 112468112468112468112468112468。

所以在這個字符串中,我們可以清楚地看到112468是重複模式。我在谷歌搜索 頗有幾分尋找一些算法來幫助我,但我只能看到那些在哪一個字符串,如博耶 - 穆爾算法等找到一個給定的模式

我現在做的怎麼找到這些重複未知的模式是,

for(i=0;i<Length of String;i++) 
{ 
    for(j=i+1;j<Length of String;j++) 
    { 
    if(s[i]==s[j] && s[i+1]==s[j+1] && s[i+2]==s[j+2] && s[i+3]==s[j+3]) 
    { 
     patternlength=j-i; 

      for(k=i;k<j;k++) 
      { 
      pattern[k]=s[i+k] 
      } 
    } 
    } 
} 

雖然這適用於給定的字符串使用的4種文字的對比窗,它很可能不是爲其他字符串工作。有沒有人知道這個更好的解決方案。

由於

+1

讓一臺機器識別文本中的任何模式並不是一個小問題。你是否只對**有興趣,例如,重複模式的字符串?如果您可以給我們**類型**或您感興趣搜索的圖案或圖案,我們可能會提供更多幫助。 – jefflunt 2012-02-20 22:20:50

+0

那麼,我正在處理的模式將是重複模式的字符串,並且會非常類似於我在上面寫爲「s」和「」的字符串。我上面編寫的方法對我來說很合適。但我只是想知道是否有一些標準算法來做到這一點。 – Goku 2012-02-20 22:26:56

回答

1

這不是模式匹配,這是圖案識別,這是根本不同的並且潛在地更難。

然而,也一直在使用(Python代碼)中的簡單一種模式通過此字符串顯示:

def find_repeated_pattern(s): 
    for i in xrange(1, len(s)/2): 
     if s == s[:i] * (len(s)/i): 
      return s[:i] 

這是一個天真的實現,因爲它所有的字符串複製的,但它可以被製成工作在O(n²)時間和恆定的空間。

+1

嗨。感謝您的回覆。實際上,我應該找到該模式的字符串也是動態生成的。我不是一個python專家,但是這個代碼片段適用於任何有點字符串,特別是就像我寫的代碼一樣。 – Goku 2012-02-20 23:12:28