检测python中没有正则表达式的字符串重复
我想要一个函数来检测字符串信誉,特别是 重复(“abcabc”) abc 重复(“aaaaaaa”) a 重复(“ababab”) ab 重复(“abcd”) abcd 我想用递归的方式来做,但我感到困惑 提前谢谢你的帮助 我正在尝试类似的东西检测python中没有正则表达式的字符串重复,python,recursion,Python,Recursion,我想要一个函数来检测字符串信誉,特别是 重复(“abcabc”) abc 重复(“aaaaaaa”) a 重复(“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[:ha
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]
也许有更好的方法,但我的第一个想法是:
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
使用正则表达式:
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)
测试:
那么ababa会是什么呢?我假设ababa会是ababa,我想要的是基本上检测重复字符串的子字符串,比如“abababab”会给我abI解决正则表达式的情况*,比如(ab)*匹配abababab,我需要先检测子字符串你的问题是什么?“请从头开始为我编写这个函数”?你可能正在寻找的算法:你所说的*子字符串是什么意思?既然子字符串是一个字符串,你怎么能将它相乘呢?这是一个很好的Python特性:
2*“test”==“testtest”
。哇,很酷的解决方案,我的错,我可以将字符串相乘。在最后一行的第二行,我假设你需要将(len(string)/len(substring))转换为intGreat解决方案谢谢~谢谢你的帮助,但我被禁止使用regex模式
repetitions("oblabla")
#output: "oblabla"
repetitions("blabla")
#output: "bla"