2013-11-04 31 views
2

我想一個函數來檢測串的信譽,特別檢測串重複在python沒有正則表達式

重複( 「ABCABCABC」) ABC

重複( 「AAAAAAA」) 一個

重複( 「ABABAB」) AB

重複( 「ABCD」) ABCD

我想在一個遞歸的方式做這件事,但我很困惑

感謝您的幫助提前!

我試圖像

def repetition(r): 
    if len(r) == 2: 
     if r[0] == r[1]: 
      return r[0] 
    half = len(r)/2 
    repetition(r[:half]) 
    if r[:half] == r[half:]: 
     return r[:half] 
+1

什麼是ababa? –

+0

我認爲貝巴將是貝巴,我要的是bascially檢測重複串的子串,像什麼「ABABABAB」會給我AB –

+0

我解決了正則表達式的情況下\ *,如(AB)\ *匹配ababab的我需要先檢測子串 –

回答

1

有可能是一個更好的方式來做到這一點,但我首先想到的會是這樣:

def repetition(string): 
    substring = '' 
    for character in string: 
     substring += character 
     if len(string) % len(substring) == 0: 
      if (len(string)/len(substring)) * substring == string: 
       return substring 
+0

什麼ü意思*子?由於substring是一個字符串,你怎麼能乘以它? –

+0

這是一個很棒的Python特性:'2 *「test」==「testtest」'。 –

+0

哇涼的解決方案,是我不好,我可以繁殖串 –

0

使用正則表達式:

import re 
def repetitions(s): 
    r = re.compile(r"(.+?)\1+") 
    for match in r.finditer(s): 
     if len(match.group()) != len(s): 
      return s 

    return match.group(1) 

測試:

repetitions("oblabla") 
#output: "oblabla" 

repetitions("blabla") 
#output: "bla" 
+0

感謝您的幫助,但我禁止使用正則表達式模式 –

相關問題