回文是一个与其反向相同的字符串。以下字符串是回文的示例: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)时间内解决吗?
答案 0 :(得分: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)时间内找到。