【发布时间】:2017-02-06 09:02:42
【问题描述】:
我试图通过动态编程解决一个问题。我有一个字符串,我需要找到所有可能的回文子字符串。说,我有一个长度为n 的字符串。我为查找创建了一个矩阵n*n。单元格(i,j) 为 1 或 0。如果为 1,则表示 substring[i..j] 是回文,否则为 0。最初对角线为 1,因为每个字符本身都是回文。
我需要如上所述正确填充矩阵。
我想出了以下几点:
- 如果 substring[i..j] 是一个plaindrome,那么我可以通过检查 matrix[i][j]== 来找到 substring[i-1..j+1] 在
O(1)time 是否是回文1 和 word[i-1] == word[j+1]..
对于其他一般情况,我该如何填充矩阵。
将不胜感激使用伪代码/语言特定实现来填写矩阵的小解释
编辑:我需要一些关于矩阵如何以及以何种顺序填充(即对角线、水平线等)的解释。我只想通过填写这个矩阵来解决这个问题,而不是通过其他方法。我的问题不是 this 的重复
【问题讨论】:
-
如果您将 substring 定义为 substring(start, end) 而不是 substring(start, length) 那么矩阵的一半将为零,因为它是无效值(end
-
@samgak:我知道!!!矩阵的对角线右上半部分将始终为 0
-
您还需要检查所有长度为 2 的子字符串,然后您可以使用您的规则生成其余部分。
标签: algorithm matrix dynamic-programming