最长的Palindromic子串澄清

时间:2017-02-28 01:37:12

标签: string algorithm palindrome

  

方法#3(动态规划)[已接受]

     

为了改善蛮力解决方案,我们首先要观察我们的情况   在验证回文时避免不必要的重新计算。   考虑一下''ababa''。如果我们已经知道了   ''bab''是一个回文,显然''ababa''必须是回文,因为左右两个结尾   字母是一样的。

     

这产生了一个直接的DP解决方案,我们首先进行初始化   一个和两个字母的回文,并努力找到所有   三个字母回文,等等...

     

复杂性分析

     

时间复杂度:O(n ^ 2)这给了我们运行时间   O(n ^ 2)的复杂性。

     

空间复杂度:O(n ^ 2)。它使用O(n ^ 2)空间   存储表。

我在网上阅读了上述问题的解决方案,并对此有一些疑问(如果这不是正确的论坛发帖请告诉我)。这是我对如何解决这个问题的理解:保存所有的一个char-palindromes。然后对于其中的每一个,如果左边的字符等于右边的字符,请保留它。如果不满足该条件,则停止处理此子字符串。继续这样直到结束。

这是对的吗?如果是这样,这如何转化为O(N ^ 2)算法?是因为,在最坏的情况下,我们必须通过字符串N次来将每个潜在的回文增加一个字符?这部分对我来说不直观。

1 个答案:

答案 0 :(得分:0)

您的解释是正确的 在最坏的情况下,我们需要检查所有子串的长度增加。我们首先检查长度为1的所有子串,然后检查长度为3的所有子串,依此类推。此外,我们还需要考虑"abba"类型的回文,因此我们还需要检查所有候选人的长度是否均匀。所以在最坏的情况下,我们需要验证给定输入字符串的每个可能的子字符串。

长度为n的给定字符串的子字符串总数为n(n + 1)/2

n * (n + 1) / 2 = n ^ 2 / 2 + n / 2 = O(n ^ 2)

可以在O(1)中对回文进行单一验证步骤,因此总运行时间为O(n ^ 2)