题目链接: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. 【uoj#180】[UR #12]实验室外的攻防战 结论题+树状数组

    题目描述 给出两个长度为 $n$ 的排列 $A$ 和 $B$ ,如果 $A_i>A_{i+1}$ 则可以交换 $A_i$ 和 $A_{i+1}$ .问是否能将 $A$ 交换成 $B$ . 输入 ...

  2. What Is The Promiscuous Mode

    What Is The Promiscuous Mode? Some Network Interface Cards (NICs) may not allow network traffic afte ...

  3. BeanUtils介绍及其使用

    BeanUtils工具由Apache软件基金组织编写,提供给我们使用,主要解决的问题是:把对象的属性数据封装到对象中.在整个J2EE的编程过程中,我们经常会从各种配置文件中读取相应的数据,需要明白的一 ...

  4. 【BZOJ4011】【HNOI2015】落忆枫音(动态规划)

    [BZOJ4011][HNOI2015]落忆枫音(动态规划) 题面 BZOJ 洛谷 Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜 ...

  5. CDN公共库、前端开发常用插件一览表(VendorPluginLib)

    =======================================================================================前端CDN公共库===== ...

  6. SP1487 PT07J - Query on a tree III (主席树)

    SP1487 PT07J - Query on a tree III 题意翻译 你被给定一棵带点权的n个点的有根数,点从1到n编号. 定义查询 query(x,k): 寻找以x为根的k大点的编号(从小 ...

  7. Listener 介绍

    当 web 应用在 web 容器中运行时,web 应用内部会不断地发生各种事件:如 web 应用启动.web 应用停止,用户 session 开始.用户 session 结束.用户请求到达等. 实际上 ...

  8. python基础--文件操作实现全文或单行替换

    python修改文件时,使用w模式会将原本的文件清空/覆盖.可以先用读(r)的方式打开,写到内存中,然后再用写(w)的方式打开. 替换文本中的taste 为 tasting Yesterday whe ...

  9. SpringCloud学习(1)——SpringCloud概述

    微服务架构: 微服务架构是一种架构模式或者说是一种架构风格, 他提倡将单一应用程序划分成一组小的服务, 每个服务运行在其独立的进程中, 服务之间互相协调,互相配合, 为用户提供最终价值.服务之间采用轻 ...

  10. Spring 多数据源 @Transactional 注解事务管理

    在 Spring,MyBatis 下两个数据源,通过 @Transactional 注解 配置简单的事务管理 spring-mybatis.xml <!--******************* ...