Python 以尽可能多的步骤从字符串中减去子字符串

Python 以尽可能多的步骤从字符串中减去子字符串,python,python-3.x,python-2.7,Python,Python 3.x,Python 2.7,目标是找出从s中减去t的最大次数 t=ab,s=aabb。在第一步中,我们检查t是否包含在s中。这里,T包含在中间,即AABB。因此,我们将移除它,结果将是ab,并将计数值增加1。我们再次检查t是否包含在s中。现在,t等于s,也就是ab,我们从s中去掉它,然后增加计数。因此,由于t不再包含在s中,我们停止并打印计数值,在本例中为2 当您有s='abbaa't='abba'这样的内容时,就会出现问题。 现在不管你是从最后一步走还是乞讨,都很重要,因为你会从最后一步走得更多 def MaxNum(s

目标是找出从s中减去t的最大次数

t=ab,s=aabb。在第一步中,我们检查t是否包含在s中。这里,T包含在中间,即AABB。因此,我们将移除它,结果将是ab,并将计数值增加1。我们再次检查t是否包含在s中。现在,t等于s,也就是ab,我们从s中去掉它,然后增加计数。因此,由于t不再包含在s中,我们停止并打印计数值,在本例中为2

当您有s='abbaa't='abba'这样的内容时,就会出现问题。 现在不管你是从最后一步走还是乞讨,都很重要,因为你会从最后一步走得更多

def MaxNum(s,t):
  if not t in s:
    return 0
  elif s.count(t) == 1:
    front = s.find(t)
    sfront = s[:front] + s[front + len(t):]
    return 1 + MaxNum(sfront,t)
  else:
    back = s.rfind(t)
    front = s.find(t)
    sback = s[:back] + s[back +len(t):]
    sfront = s[:front] + s[front + len(t):]
    print (sfront,sback)
    return max(1 + MaxNum(sfront,t),1 + MaxNum(sback,t))

我应该问你为什么关心吗?

你的问题是什么?您具体需要哪些帮助?请使用或标记,除非您的问题特别涉及跨版本兼容性问题。如果您只是在学习基础知识,那么您可能应该忽略Python 2,而将时间花在当前推荐和支持的语言版本上,即Python 3上。@Carcigenicate好吧,这段代码没有得到所有正确答案。而且时间太长了。我在做一个考试,却找不出答案。如果我在乎,你是什么意思?而且,它不必在字符串的开头,我也不认为结尾有什么理由。问题是从左或右从S中减去T,然后尽可能多地完成步骤。如果您认为它不起作用,请尝试构造一个反例并运行它。不要马上就放弃它。
def foo(t,s):
    return max([0] + [
        1 + foo(t,s[:i]+s[i+len(t):]) for i in range(len(s)) if s[i:].startswith(t)])