我试图通过动态编程解决问题。我有一个字符串,我需要找到所有可能的回文子串。说,我有一个长度为n
的字符串。我为查找创建了一个矩阵n*n
。单元格(i,j)
是1或0.如果它是1,则表示子串[i..j]是回文,否则为0.最初对角线为1,因为每个字符本身都是回文。< / p>
如上所述,我需要正确填充矩阵。
我想出了以下内容:
O(1)
时间子串[i-1..j + 1]是否是回文结构== 1和word [i-1] == word [j + 1] .. 对于其他一般情况,如何填写矩阵。
非常感谢使用伪代码/语言特定实现来填写矩阵的小解释
编辑:我需要解释矩阵如何以及以何种顺序填充(即对角线,水平等)。我想通过仅填写此矩阵来解决问题,而不是通过其他方法。我的问题不是this
的重复答案 0 :(得分:2)
可以检查回文子串的长度是1到N.
For i from 1 to n
Mark all substring of length i is palindromic or not.
伪代码:(基于字符串数组1)
for len=1 to n: // check string from length 1 to n
for i=1 to (n-len + 1): // substring start from 1 to (n-len+1)
j = i + len - 1
if len == 1:
matrix[i][j]==1
else if len == 2:
if array[i] == array[j]:
matrix[i][j] = 1
else:
matrix[i][j] = 0
else:
if matrix[i+1][j-1] == 1 and array[i] == array[j]:
matrix[i][j] = 1
else:
matrix[i][j] = 0