在没有正则表达式的情况下检测python中的字符串重复

时间:2013-11-04 23:11:41

标签: python recursion

我想要一个检测字符串声誉的函数,特别是

  

重复( “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]

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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"