题目链接: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. Shell脚本重启Python程序

    # restart.sh old_pid=$(ps ax|grep Service.py|grep -v grep|awk '{print $1}') echo "old_pid=${old ...

  2. 51nod 1292 字符串中的最大值V2(后缀自动机)

    题意: 有一个字符串T.字符串S的F函数值可以如下计算:F(S) = L * S在T中出现的次数(L为字符串S的长度).求所有T的子串S中,函数F(S)的最大值. 题解: 求T的后缀自动机,然后所有每 ...

  3. JS中数组和字符串具有的方法,以及substring,substr和slice的用法与区别

     String 对象属性 属性 描述 constructor 对创建该对象的函数的引用 length 字符串的长度 prototype 允许您向对象添加属性和方法 String 对象方法 方法 描述 ...

  4. Asp.Net保存session的三种方法 (Dll文件更新导致session丢失的解决办法)

    1. InProc模式(默认值):asp.net将session保存到当前进程中,这种方式最快,但是不能多台服务器共享session,且会话状态数据容易丢失. <sessionState mod ...

  5. javascript中的位运算,

    罗浮宫群里又有讨论位运算符号|了,做过一段时间php,数据库保存布尔值数据经常用到,比如100110 就表明了六个属性的是与否,极大减少了数据量..] ECMAScript 中位运算跟其他语言一样的. ...

  6. gitlab之邮箱配置

    一.gitlab配置邮件通知功能 编辑/etc/gitlab/gitlab.rb 文件   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #配置如下   gitlab_rai ...

  7. Bash to check SSL cert expired

    Code like this, You can send out a email to notice $ cat urls.txt www.baidu.com $ cat cert_chk.sh #! ...

  8. openstack配置模块

    一.简介 openstack中负责处理配置的模块是oslo.config,它可以处理配置项和配置文件.通常的配置处理都是如下形式: from oslo.config import cfg CONF=c ...

  9. JAVA类与对象---实例变量与类变量的区别,实例方法和类方法的区别

    实例变量 实例变量声明在一个类中,但在方法.构造方法和语句块之外: 当一个对象被实例化之后,每个实例变量的值就跟着确定: 实例变量在对象创建的时候创建,在对象被销毁的时候销毁: 实例变量的值应该至少被 ...

  10. python列表排序方法reverse、sort、sorted

    python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...