最长回文子序列

时间:2022-12-03 14:57:45

1.动态规划

代码

最长回文子序列

问题:dp[i][j] :是否为回文串(以i 开头,以j结尾)

最优子:dp[i][j]=dp[i+1][j-1]

若开头和结尾元素相等,并且中间也是回文,那么dp[i][j]也是回文

记录长度:ans;

记录开头:ret;

遍历顺序:用长度遍历,(长度1一直到数组长,)!!!!

因长度大于1后,需要长度比它小的dp信息,所以用长度遍历,


2.马拉车??

(真6,看了几个小时)

最长回文子序列

最长回文子序列

步骤:1初始化,避免讨论偶数和奇数问题(直接创了个新数组,有点浪费空间,待解决)

       2.从第一个字符开始遍历,若字符在前一个回文串的范围内,那么它的长度等于与回文串中心对称的那个元素的回文长度(注意比较长度范围是否超过right,),若不是,则重新延展遍历,

3.更新回文中心mid和最右边right

PS:p[i]-1为原字符串回文长度(已经减去添加的字符)