【发布时间】:2017-02-28 01:37:11
【问题描述】:
方法 #3(动态编程)[接受]
为了改进蛮力解决方案,我们首先观察我们如何能够 在验证回文时避免不必要的重新计算。 考虑一下''ababa''的情况。如果我们已经知道 ''bab'' 是回文,显然''ababa'' 肯定是回文,因为左右两端 字母是一样的。
这产生了一个直接的 DP 解决方案,我们首先对其进行初始化 一个和两个字母的回文,并努力找到所有 三个字母回文,等等……
复杂性分析
时间复杂度:O(n^2) 这给了我们一个运行时间 O(n^2) 的复杂度。
空间复杂度:O(n^2)。它使用 O(n^2) 空间 存储表格。
我在网上阅读了上述解决此问题的方法,并对此有一些疑问(如果这不是发帖的正确论坛,请告诉我)。这是我对如何解决这个问题的理解:保存所有单字符回文。然后对于其中的每一个,如果左侧的字符等于右侧的字符,请保留它。如果不满足该条件,请停止处理此子字符串。继续这个直到结束。
这是正确的吗?如果是这样,这如何转化为 O(N^2) 算法?是不是因为在最坏的情况下,我们必须遍历字符串 N 次才能将每个潜在回文数增加一个字符?这部分对我来说并不直观。
【问题讨论】:
标签: string algorithm palindrome