最长回文子序列 java

简介: 最长回文子序列 java

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

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

示例 1:

输入:s = "bbbab"

输出:4

解释:一个可能的最长回文子序列为 "bbbb" 。

示例 2:

输入:s = "cbbd"

输出:2

解释:一个可能的最长回文子序列为 "bb" 。

提示:

1 <= s.length <= 1000

s 仅由小写英文字母组成

51.1.png

有公式,套公式

从下往上填表,从左往右,先初始化对角线,然后依次填入,当a==b时,a[i][j]就取左下角的值加2,否之取a[i-1][j],a[i+1][j]的最大值

for(int i=n-1;i>=0;i--){
for(int j=i-1;j<n;j++){
}
}
public int longestPalindromeSubseq(String s) {
        int n=s.length();
        int[][] dp=new int[n][n];
        for(int i=0;i<n;i++){
            dp[i][i]=1;
        }
        for(int i=n-1;i>=0;i--){
            for(int j=i+1;j<n;j++){
                char a=s.charAt(i);
                char b=s.charAt(j);
                if(a==b){
                    dp[i][j]=dp[i+1][j-1]+2;
                }else{
                    dp[i][j]=Math.max(dp[i][j-1],dp[i+1][j]);
                }
            }
        }
        return dp[0][n-1];
    }

相关文章
|
19天前
|
算法 Java
[Java·算法·简单] LeetCode 392. 判断子序列 详细解读
[Java·算法·简单] LeetCode 392. 判断子序列 详细解读
44 0
|
19天前
|
算法 Java C++
Java每日一练(20230424) 二叉树中序遍历、交换链表节点、不同子序列
Java每日一练(20230424) 二叉树中序遍历、交换链表节点、不同子序列
41 0
Java每日一练(20230424) 二叉树中序遍历、交换链表节点、不同子序列
|
19天前
|
Java
leetcode 516. 最长回文子序列(JAVA)题解
leetcode 516. 最长回文子序列(JAVA)题解
28 0
|
6月前
|
Java
594. 最长和谐子序列 --力扣 --JAVA
和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。 数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。
28 0
|
9月前
|
Java
【Java每日一题,动态规划,Map实现】最长定差子序列
【Java每日一题,动态规划,Map实现】最长定差子序列
|
9月前
|
Java
【Java每日一题,动态规划】最长定差子序列
【Java每日一题,动态规划】最长定差子序列
|
Java
LeetCode 392.判断子序列(Java语言)
LeetCode 392.判断子序列(Java语言)
73 0
LeetCode 392.判断子序列(Java语言)
|
存储 算法 Java
二维最长上升子序列:朴素 DP & 二分 DP(含证明)& 树状数组 DP | Java 刷题打卡
二维最长上升子序列:朴素 DP & 二分 DP(含证明)& 树状数组 DP | Java 刷题打卡
|
3天前
|
Java 开发者 UED
掌握Java多线程编程:从基础到高级
【5月更文挑战第31天】本文深入探讨了Java多线程编程的核心概念,包括线程的创建、生命周期、同步机制以及高级并发工具。通过实际示例和代码片段,读者将学会如何有效地管理和协调线程,以编写高效且稳定的并发应用程序。
|
3天前
|
安全 Java 调度
Java语言多线程编程技术深度解析
Java语言多线程编程技术深度解析