动态编程以查找所有回文子串

时间:2016-09-28 11:45:41

标签: algorithm matrix dynamic-programming

我试图通过动态编程解决问题。我有一个字符串,我需要找到所有可能的回文子串。说,我有一个长度为n的字符串。我为查找创建了一个矩阵n*n。单元格(i,j)是1或0.如果它是1,则表示子串[i..j]是回文,否则为0.最初对角线为1,因为每个字符本身都是回文。< / p>

如上所述,我需要正确填充矩阵。

我想出了以下内容:

  1. 如果substring [i..j]是一个plaindrome,那么我可以通过检查matrix [i] [j]来找到O(1)时间子串[i-1..j + 1]是否是回文结构== 1和word [i-1] == word [j + 1] ..
  2. 对于其他一般情况,如何填写矩阵。

    非常感谢使用伪代码/语言特定实现来填写矩阵的小解释

    Initial Matrix

    编辑:我需要解释矩阵如何以及以何种顺序填充(即对角线,水平等)。我想通过仅填写此矩阵来解决问题,而不是通过其他方法。我的问题不是this

    的重复

1 个答案:

答案 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