1652929558(1).png
知道是动规,但动不起来啊。。。。

思路

DP

1652929868(1).png

  1. var longestPalindromeSubseq = function(s) {
  2. // dp
  3. let dp =Array.from(Array(s.length),()=>Array(s.length).fill(0))
  4. for(let i=0;i<s.length;i++){
  5. dp[i][i] =1
  6. }
  7. // 要保证左下右都是被计算过的,所以行要从下往上遍历,列从左往右
  8. for(let i=s.length-1;i>=0;i--){
  9. for(let j=i+1;j<s.length;j++){
  10. if(s[i]===s[j]){
  11. dp[i][j] =dp[i+1][j-1]+2
  12. }else{
  13. dp[i][j] =Math.max(dp[i][j-1],dp[i+1][j])
  14. }
  15. }
  16. }
  17. return dp[0][s.length-1]
  18. };

2.一个很神奇的思路

翻转字符串,然后求这两个字符串的公共最长子序列,就是答案了!!