题目链接:https://leetcode.com/problems/longest-palindromic-subsequence/description/

题目大意:找出最长回文子序列(不连续),第5题是最长回文子串。

法一(借鉴):dp,与5题,最长回文子串进行比较,这个dp更难一点。代码如下(耗时51ms):

     //dp公式:dp[i,j]=2表示下标i到j的字符串中,最长回文子序列长度是2
//当s[i]=s[j]时,dp[i,j]=dp[i+1,j-1]+2
//当s[i]!=s[j]时,dp[i,j]=max(dp[i+1,j],dp[i,j-1])
public int longestPalindromeSubseq(String s) {
int length = s.length();
int dp[][] = new int[length][length];
for(int i = length - 1; i >= 0; i--) {//从后向前dp计算,不知道为什么。。。
dp[i][i] = 1;
for(int j = i + 1; j < 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][j - 1], dp[i + 1][j]);
}
}
}
return dp[0][length - 1];
}

dp数组(例子:bbab):

  0("b") 1("b") 2("a") 3("b")
0("b") 1(b) 2(bb) 2(bba) 3(bbab)
1("b")   1(b) 1(ba) 3(bab)
2("a")     1(a) 1(ab)
3("b")       1(b)

可以从上表看出最后结果在dp[0][3]中。

dp数组填充顺序:从下向上,每次计算都使用左边、下边,左下的数据。

法二(借鉴):记忆性搜索,其实感觉还是dp的思想,但是会比纯dp快。代码如下(耗时39ms):

     public int longestPalindromeSubseq(String s) {
return dfs(s, 0, s.length() - 1, new int[s.length()][s.length()]);
}
public static int dfs(String s, int i, int j, int dp[][]) {
if(dp[i][j] != 0) {//如果已经有值,则直接返回,代表记忆性
return dp[i][j];
}
if(i > j) {
return 0;
}
if(i == j) {
return 1;
}
if(s.charAt(i) == s.charAt(j)) {
dp[i][j] = dfs(s, i + 1, j - 1, dp) + 2;
}
else {
dp[i][j] = Math.max(dfs(s, i + 1, j, dp), dfs(s, i, j -1, dp));
}
return dp[i][j];
}

516.Longest Palindromic subsequence---dp的更多相关文章

  1. LN : leetcode 516 Longest Palindromic Subsequence

    lc 516 Longest Palindromic Subsequence 516 Longest Palindromic Subsequence Given a string s, find th ...

  2. 516. Longest Palindromic Subsequence最长的不连续回文串的长度

    [抄题]: Given a string s, find the longest palindromic subsequence's length in s. You may assume that ...

  3. 516. Longest Palindromic Subsequence

    Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...

  4. [LeetCode] 516. Longest Palindromic Subsequence 最长回文子序列

    Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...

  5. LC 516. Longest Palindromic Subsequence

    Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...

  6. 【LeetCode】516. Longest Palindromic Subsequence 最长回文子序列

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题思路 代码 刷题心得 日期 题目地址:https://le ...

  7. [leetcode]516. Longest Palindromic Subsequence最大回文子序列

    Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...

  8. 516 Longest Palindromic Subsequence 最长回文子序列

    给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 详见:https://leetcode.com/problems/longest-palindromic-subseque ...

  9. 【leetcode】516. Longest Palindromic Subsequence

    题目如下: 解题思路:很经典的动态规划题目,但是用python会超时,只好用C++了. 代码如下: class Solution { public: int longestPalindromeSubs ...

  10. [LeetCode] Longest Palindromic Subsequence 最长回文子序列

    Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...

随机推荐

  1. Oracle中三种循环(For、While、Loop)案例

    1.ORACLE中的FOR循环用法(九九乘法表) declare i ; j ; begin .. loop ..i loop Dbms_Output.put(i||'*'||j||'='||i*j) ...

  2. 基于jwt的token验证

    一.什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519). 该token被设计为紧凑且安全的,特别适用于分布 ...

  3. 【JavaScript】事件

    一.前言         继续上一章的内容,继续今天的Js学习. 二.内容         事件处理程序 事件就是用户或浏览器自身执行的某种动作.而响应某个事件的函数就叫做事件处理程序 //HTML事 ...

  4. LOJ2430:[POI2014]沙拉餐厅Salad Bar——题解

    https://loj.ac/problem/2430 是的我BZOJ又没卡过……懒得卡了. 参考:https://blog.csdn.net/zqh_wz/article/details/52887 ...

  5. 测试开发linux面试之三:后台进程之操作

    Hi,大家好我是Tom,继上次分享之后这次给大家带来新的知识. 进程是Linux系统中一个非常重要的概念.Linux是一个多任务的操作系统,系统上经常同时运行着多个进程.我们不关心这些进程究竟是如何分 ...

  6. Redis的String、Hash类型命令

    String是最简单的类型,一个Key对应一个Value,string类型是二进制安全的.Redis的string可以包含任何数据,比如jpg图片或者序列化的对象.最大上限是1G字节.    Hash ...

  7. [JSOI2008]Blue Mary的战役地图——全网唯一一篇dp题解

    全网唯一一篇dp题解 网上貌似全部都是哈希+二分(反正我是大概baidu了翻了翻)(还有人暴力AC了的..) 哈希还是相对于dp还是比较麻烦的. 而且正确性还有可能被卡(当然这个题不会) 而且还容易写 ...

  8. django 自定义认证

    在Django中自定义身份验证 Django 自带的认证系统足够应付大多数情况,但你或许不打算使用现成的认证系统.定制自己的项目的权限系统需要了解哪些一些关键点,即Django中哪些部分是能够扩展或替 ...

  9. 「Linux」centos7安装python

    •安装python3.6可能使用的依赖 yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqli ...

  10. Java集合框架(set)

    set继承自collection接口,其子类和子接口如下: set的共同特性:不能添加相同的元素,通常无法记住元素添加的顺序 1.HashSet类 判断两元素相同的标准:1.equals方法返回tru ...