问题来源是某学校的python作业(比我们学校教的好多了),题目要求如下:
题目要求
定义semidrome(半回文)串:由若干回文串(长度>=2)拼接而成,例如:aabb(aa和bb)、ababcbii(aba和bcb和ii)。
现要求实现 is_semidrome(s) 函数,判定字符串s是否是半回文串。核心要求:不能使用for和while循环,尽量递归。然后复杂度呢不用怎么考虑,数据应该比较小。我这里直接把能够通过oj的代码贴出来,大家一看就明白了。
def is_semidrome(s: str):
def check(s):
if len(s) <= 1:
return True
else:
return s[0] == s[-1] and check(s[1:-1])
def findpre(s):
# 找s串中,下标从0开始的最长回文串
if len(s) < 2:
return ''
elif check(s):
return s
else:
return findpre(s[0:-1])
def judge(s):
# s是尚待测试的字符串部分,它前面的已经作为回文串被去掉了
if len(s) < 2:
return False
cur = findpre(s)
curlen = len(cur)
if curlen == 0:
return False
elif curlen == len(s):
return True
else:
return judge(s[curlen:])
return judge(s)