Python 最长回文递归方法当开始和结束处的两个字符相等时,为什么要将计数与字符串的其余部分进行比较?
我试图理解python中使用递归方法和动态编程的最长回文的解决方案(还不明白为什么我们称之为动态编程) 我了解基本条件 我知道当两个字符相等时,我们会移动到字符串中的下一个字符,即Python 最长回文递归方法当开始和结束处的两个字符相等时,为什么要将计数与字符串的其余部分进行比较?,python,recursion,dynamic-programming,Python,Recursion,Dynamic Programming,我试图理解python中使用递归方法和动态编程的最长回文的解决方案(还不明白为什么我们称之为动态编程) 我了解基本条件 我知道当两个字符相等时,我们会移动到字符串中的下一个字符,即 c=_longestPalen(st, b+1, e-1, c+2) 但我们为什么要这么做 return bigger(c, bigger(_longestPalen(st, b+1,e,c), _longestPalen(st, b, e-1, c))) 这是完整的代码 def longestPalen
c=_longestPalen(st, b+1, e-1, c+2)
但我们为什么要这么做
return bigger(c, bigger(_longestPalen(st, b+1,e,c), _longestPalen(st, b, e-1, c)))
这是完整的代码
def longestPalen(st):
res=_longestPalen(st, 0,len(st)-1, 0)
return res
def bigger(x, y):
if x>y:
return x
else:
return y
def _longestPalen(st, b,e,c):
if e<b: return c
if b==e: return c+1
if st[b] == st[e]:
c=_longestPalen(st, b+1, e-1, c+2)
return bigger(c, bigger(_longestPalen(st, b+1,e,c), _longestPalen(st, b, e-1, c)))
return bigger(_longestPalen(st, b+1, e, 0), _longestPalen(st, b, e-1, 0))
def longestPalen(st):
res=_longestPalen(st,0,len(st)-1,0)
返回res
def(x,y):
如果x>y:
返回x
其他:
返回y
def_longestPalen(st、b、e、c):
如果e我稍微重新构造了代码,使其更符合Python约定:
def最长调色板:
返回最长的调色板(s,0,len(s)-1,0)
定义最长的颜色(s、b、e、c):
如果e
如果当前第一个和最后一个字符相同,则有四个选项:
当前的第一个和最后一个字符都在最长的回文中。
- 输入:“阿巴”
- 最长回文:“阿巴”(4)
只有当前第一个字符在最长回文中。
- 输入:“cabbacxc”
- 最长回文:“cabbac”(6)
- 即使第一个和最后一个字符是“c”,但只有第一个字符在最长回文中,未来的递归步骤需要包括测试“cabbacx”和“cabbac”以获得正确答案
只有当前最后一个字符位于最长回文中。
- 输入:“cxcabbac”
- 最长回文:“cabbac”(6)
- 即使第一个和最后一个字符是“c”,但最后一个字符在最长回文中,未来的递归步骤需要包括测试“xcabbac”和“cabbac”以获得正确答案
当前的第一个或最后一个字符都不在最长回文中。
- 输入:“cyabbaxc”
- 最长回文:“阿巴”(4)
- 这个案例将在未来的递归步骤中处理,因为下一步将是“yabbax”,我们将处理“yabba”和“abbax”的测试
你跑步的原因是什么
c=_longestPalen(str,b+1,e-1,c+2)
返回较大值(c,较大值(_longestPalen(str,b+1,e,c),_longestPalen(str,b,e-1,c)))
或
返回最大值(_longest_palen(s,b+1,e-1,c+2),
_最长的颜色(s、b+1、e、c),
_最长的调色板(s、b、e-1、c))
在修改的实现中,要考虑所有这些情况。
此行的伪代码类似于:
bigger(both_first_last_included, bigger(only_first_included, only_last_included))
在修改后的实现中,我使用了我发现在理解正在发生的操作时更清晰的方法
max(both_first_last_included, only_first_included, only_last_included)
最好不要调用variablesstr
,因为这是一个被覆盖的内置函数。“动态规划”是一个毫无意义的企业流行语,在编程真正成为一件大事之前,它是为营销目的编造的,所以我不会太担心它。最后,我不确定为什么存在biger
。似乎>
更清楚了…?谢谢你对动态规划的观点,我刚刚修改了它,但我仍然没有关于BRe的答案:术语“动态规划”,这就是我们所知道的:明白了,基本上把一个更大的问题分解成更小的问题,关于我的主要问题有什么线索吗?哇,亨利解释得很好,我真的很感激。所以我正确地理解如果s[B]==s[e]:不正确。。然后我们试着从b+1,e或b,e-1开始,找出哪个更大。而c
被重置为0,因为一旦发现第一个和最后一个字符不匹配,您就知道您不在回文中。