【问题标题】:Finding the longest substring by dynamic programmin [duplicate]通过动态规划找到最长的子串[重复]
【发布时间】:2015-05-17 08:06:12
【问题描述】:

回文是一个与其反向相同的字符串。以下字符串是回文的示例:abba, refer, 0101010, x。字符串X = x1, x2, x3, . . . , xn 的子字符串是字符串Y = y1, y2, . . . , yk 使得y1 = xi1 , y2 = xi2 , . . . , yk = xik and i1 < i2 < . . . ik

例如,2、7、4 是 1、2、8、7、4 的子串。设计最有效的动态规划算法,输入长度为 n 的字符串 X 并找到最长的长度X 的子串是回文。这个问题能在O(n^2)时间内解决吗?

【问题讨论】:

    标签: algorithm dynamic-programming


    【解决方案1】:

    这是子字符串的情况。 但您在问题中的示例表明了一个子序列。 O(n^2) 解决方案将是这样的 - len(l,r) - x[l..r] 的最长回文子串的长度。

    for i=1 to n
     for j=1 to n
      if(i=j) 
        len(i,j)=1       //1-length palindromes
      if(i+1=j)
         then len(i,j)=2 if (x[l]=x[r]),or 1 otherwise //for even-length palindrome. 
      if(x[l]=x[r]) 
         then len(i,j)=2+len(i+1,j-1) //both character same
      else
         len(l,r)=maximum(len(l,r-1),len(l+1,r)); //increase left,decrease right
    

    答案是 len(1,n),它会在 O(n^2) 时间内找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 2019-05-28
      • 2012-05-08
      相关资源
      最近更新 更多