区间dp算法

最长回文子序列

给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。

子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。

示例 1:

复制代码
输入:s = "bbbab"
输出:4
解释:一个可能的最长回文子序列为 "bbbb" 。

示例 2:

复制代码
输入:s = "cbbd"
输出:2
解释:一个可能的最长回文子序列为 "bb" 。

提示:

  • 1 <= s.length <= 1000
  • s 仅由小写英文字母组成

class Solution {

public int longestPalindromeSubseq(String s) {

int[][] dp = new int[s.length()][s.length()];

for (int i = s.length() - 1; i >= 0 ; i--) {

dp[i][i] = 1;

for (int j = i; j < s.length(); j++) {

if(i < j){

if(s.charAt(i) == s.charAt(j))

dp[i][j] = dp[i + 1][j - 1] + 2;

else

dp[i][j] = Math.max(dp[i + 1][j] , dp[i][j - 1]);

}

}

}

return dp[0][s.length() - 1];

}

}

相关推荐
amcomputer1 小时前
简单总结拉格朗日乘数法
算法
hi_ro_a2 小时前
C++ 手撕 STL 底层:红黑树封装 mymap/myset
数据结构·c++·算法
aq55356002 小时前
Laravel 10.x重磅升级:PHP 8.1+新时代
开发语言·php·laravel
秋雨梧桐叶落莳2 小时前
iOS——Masonry约束内容整理
开发语言·学习·macos·ios·objective-c·cocoa
tankeven2 小时前
贪心算法(Greedy Algorithm)详解:从理论到C++实践
c++·算法
Hesionberger2 小时前
LeetCode72.编辑距离(多维动态规划)
java·开发语言·c++·python·算法
lwf0061642 小时前
逻辑回归学习笔记-梯度下降求解回归方程
算法·机器学习·逻辑回归
❆VE❆2 小时前
React基础篇(三):项目中 React 基础核心知识点实战
前端·javascript·react.js·前端框架
Hello--_--World2 小时前
React 的核心设计理念是什么?并列举三大核心特性。
javascript·react.js·ecmascript