Python 用动态规划法求A和B的最短交织字符串

Python 用动态规划法求A和B的最短交织字符串,python,string,algorithm,dynamic-programming,interleave,Python,String,Algorithm,Dynamic Programming,Interleave,我有一个关于动态规划的问题 给定两个字符串A和B,找出其中最短的交错字符串 例如,对于A=“苹果”,B=“绝对” 最短的答案是“ABPPSOLUTE” 相反,answer my函数返回“APPABSOLUTE” 我解决这个问题的想法是将A[0]和B[0]不断地交错len(A)+len(B)次 但这不起作用。以下是一些让你开始的想法 动态编程的标记wiki将其描述为: 动态规划是一种算法技术,用于有效地解决包含许多重叠子问题的递归结构问题 因此,首先,尝试并思考一种递归解决问题的方法。问:“我如何

我有一个关于动态规划的问题

给定两个字符串A和B,找出其中最短的交错字符串

例如,对于
A=“苹果”
B=“绝对”

最短的答案是
“ABPPSOLUTE”
相反,answer my函数返回“APPABSOLUTE”

我解决这个问题的想法是将A[0]和B[0]不断地交错
len(A)+len(B)

但这不起作用。

以下是一些让你开始的想法

动态编程的标记wiki将其描述为:

动态规划是一种算法技术,用于有效地解决包含许多重叠子问题的递归结构问题

因此,首先,尝试并思考一种递归解决问题的方法。问:“我如何才能咬掉这个问题的一小部分并加以处理,以使我留下的是这个问题的另一个例子?”

在本例中,“小片段”将是单个字符,剩下的将是字符串中的剩余字符。将问题想象为“从字符串A的位置X和字符串B的位置Y开始的这两个字符串的字符的最短交错是什么?”?当您最初调用它时,X和Y是0

该问题的三个可能答案是:

  • 如果X不在A的末尾,则从字符串A中去掉字符A[X],然后递归地解决X+1,Y的问题(找到从X+1,Y开始的两个字符串的最短交错)
  • 如上所述,但从字符串B(而不是a)中提取一个字符,并递归求解X,Y+1
  • 如果A[X]和B[Y]的字符完全相同,则去掉这两个字符,并找到X+1,Y+1的解决方案
如果X和Y已到达A和B的末尾,则返回空字符串

返回上述3个字符中最短的字符串,该字符串添加到从A或B(或两者)中提取的字符中

当函数从顶层返回时,您应该有您的答案


这就是“递归”部分。“重叠子问题”是关于如何重用已经计算过的内容。在这种情况下,您可以创建一个二维字符串数组,表示所有可能的X和Y值所解决的问题,并且在输入函数时,检查您是否已经得到答案,如果已经得到答案,只需返回即可。如果没有,则按照上面的方法进行计算,在从函数返回之前,将要返回的值保存在位置[X][Y]的数组中。

是否创建了一个函数来交错字符串?我尝试过,但失败了。我可以创建交错的函数,但它不会返回最短的交错字符串。你能将你的函数包含在问题中吗?提示:我忘了提到,当我指的是A和B的交错时,交错需要保持A和B的顺序(不只是包含相同的字母)。你的答案太棒了!我将实现该算法,但它会保持顺序吗?从阅读来看,它看起来是这样的,但我想问,它确实保持了顺序,因为X和Y都从零开始,可以增加,但不能减少。呜呜!工作!:)谢谢