给定一个数组字符串,找到最长的子回合,即回文。例如,如果给定的字符串是“forgeeksskeegfor”,则输出应为“geeksskeeg”。
问题是动态编程的有效解决方案。
然而,我只是想知道为什么我们不能解决Divide and Conquer的问题,就像我们解决最大子阵列问题一样。 (http://en.wikipedia.org/wiki/Maximum_subarray_problem)
我们制定了最大的子阵列问题,以便用D& C:
有效地解决1)将给定的数组分成两半 2)返回以下三个中的最大值 ... .a)左半部分的最大子阵列总和(进行递归调用) ... .b)右半部分的最大子阵列总和(进行递归调用) ... .c)最大子阵列总和,使子阵列穿过中点
最长的Palindrome子序列问题可以是:
1)将给定的数组分成两半 2)返回以下三个中的最大值 ... .a)左半部分的最大回文总和(进行递归调用) ... .b)右半部分的最大回文总和(进行递归调用) ... .c)最大回文总和,使得子阵列穿过中点
我们可以考虑实施并说解决方案不存在,但是问题结构如何阻止我们考虑D& C解决方案?
答案 0 :(得分:0)
如果字符串的形式为“13267224”,则分而治之的方法可能会奏效。 这里,6+2+3 = 11 和 7+2+2 = 11 因此,“326722”是最长的回文和子串。但是在字符串的情况下,例如。 “abaccidba”,分而治之是行不通的。