2013-11-04 35 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

感谢您的帮助,但我禁止使用正则表达式模式 –

相关问题