leetcode 516:最长回文子序列

news/2024/9/23 6:30:12/

leetcode 516. 最长回文子序列


题目描述:给定一个字符串s,找到其中最长的回文子序列。可以假设s的最大长度为1000。
解题步骤:解决此类问题可以采用动态规划 dp[i][j]表示从第i个字符到第j个字符之间的最长回文子串。该问题类似于01背包问题
1、 状态定义:dp[i][j] 表示从第i个字符到第j个字符之间的最长回文子串的长度
2、 状态转移方程
如果第i个字符和第j个字符相同,则等于第i+1到j-1字符之间的最长子串加上2
dp [i][j] = dp [i + 1][j - 1] + 2 (s[i]==s[j])
如果第i个字符和第j个字符不同,则需要计算i和j之间子串的最大值,也即是分别i向右移动或j向左移动
dp [i][j] = max(dp[i + 1][j], dp[i][j - 1]) (s[i]!=s[j])
由于在计算dp[i][j]的时候需要提前知道dp[i+1][j]所以i从字符串最后往前遍历,dp[i][j-1]需要知道[j-1]所以j需要从前往后遍历,并且为了使计算不重复,j需要从i+1开始。
3、 初始化:dp[i][i] = 1 单个字符的最长回文序列是 1,只需要在第一个for循环即i对应的for循环中赋值就行了
在这里插入图片描述
4、 输出:dp[0][s.length-1]
代码

    public int longestPalindromeSubseq(String s) {int[][] dp = new int[s.length()][s.length()];for (int i = dp.length-1; i >= 0; i--) {dp[i][i] = 1;for (int j = i+1; j < dp.length; 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];}

http://www.ppmy.cn/news/387608.html

相关文章

ios拷贝文件,error code 516

今天写了一段拷贝文件的代码&#xff1a; NSBundle *bundle[NSBundle mainBundle];NSString *srcPath[bundle pathForResource:"images" ofType:"zip"];// Bundle内的images.zip文件NSString *enterprisePath [imagesPath stringByAppendingPathComponent…

LeetCode——516. 最长回文子序列

题目描述&#xff1a; 给定一个字符串 s &#xff0c;找到其中最长的回文子序列&#xff0c;并返回该序列的长度。可以假设 s 的最大长度为 1000 。 提示&#xff1a; 1 < s.length < 1000s 只包含小写英文字母 示例 1: 输入: “bbbab” 输出: 4 一个可能的最长回文子…

LC 516 最长回文子序列

LC 516 最长回文子序列 题目: 给你一个字符串 s &#xff0c;找出其中最长的回文子序列&#xff0c;并返回该序列的长度。 子序列定义为&#xff1a;不改变剩余字符顺序的情况下&#xff0c;删除某些字符或者不删除任何字符形成的一个序列。 输入&#xff1a;s "bbba…

516. 最长回文子序列之终极版

问题描述 给定一个字符串s&#xff0c;找到其中最长的回文子序列。可以假设s的最大长度为1000。 示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 "bbbb"。 示例 2: 输入: "cbbd" 输出: 2 一个可能的最长回文子序列为 "bb"…

516. 最长回文子序列 动态规划

给你一个字符串 s &#xff0c;找出其中最长的回文子序列&#xff0c;并返回该序列的长度。 子序列定义为&#xff1a;不改变剩余字符顺序的情况下&#xff0c;删除某些字符或者不删除任何字符形成的一个序列。 示例 1&#xff1a; 输入&#xff1a;s "bbbab" 输出…

【leetcode】516.最长回文子序列

【leetcode】516.最长回文子序列 题目思路代码复杂度 做这道题之前可以先看一下这一道 【leetcode】647.回文子串 题目 leetcode原题链接 给你一个字符串 s &#xff0c;找出其中最长的回文子序列&#xff0c;并返回该序列的长度。 子序列定义为&#xff1a;不改变剩余字符顺…

【LeetCode】516. 最长回文子序列

题目链接&#xff1a;https://leetcode-cn.com/problems/longest-palindromic-subsequence/description/ 题目描述 给定一个字符串s&#xff0c;找到其中最长的回文子序列。可以假设s的最大长度为1000。 示例 输入: “bbbab” 输出: 4 一个可能的最长回文子序列为 “bbbb…

代码随想录动态规划 || 647 516

Day49 647. 回文子串 力扣题目链接 给定一个字符串&#xff0c;你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符组成&#xff0c;也会被视作不同的子串。 思路 布尔类型的dp[i] [j]&#xff1a;表示区间范围[i,…