LeetCode 516. Longest Palindromic Subsequence

本博客转载自:http://www.cnblogs.com/grandyang/p/6493182.html
Solution1:
动态规划
像这种有关极值的问题,最应该优先考虑的就是贪婪算法和动态规划,这道题显然使用DP更加合适。我们建立一个二维的DP数组,其中dp[i][j]表示[i,j]区间内的字符串的最长回文子序列,那么对于递推公式我们分析一下,如果s[i]==s[j],那么i和j就可以增加2个回文串的长度,我们知道中间dp[i + 1][j - 1]的值,那么其加上2就是dp[i][j]的值。如果s[i] != s[j],那么我们可以去掉i或j其中的一个字符,然后比较两种情况下所剩的字符串谁dp值大,就赋给dp[i][j],那么递推公式如下:

          /  dp[i + 1][j - 1] + 2                   if (s[i] == s[j])

dp[i][j] =

          \  max(dp[i + 1][j], dp[i][j - 1])        if (s[i] != s[j])
class Solution {
public:int longestPalindromeSubseq(string s) {int n = s.size();vector<vector<int>> dp(n, vector<int>(n));//向量元素默认初始化为0for (int i = n - 1; i >= 0; --i) {dp[i][i] = 1;for (int j = i + 1; j < n; ++j) {if (s[i] == s[j]) {dp[i][j] = dp[i + 1][j - 1] + 2;} else {dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);}}}return dp[0][n - 1];}
};

一个例子的执行过程如下图所示:


在LeetCode5 https://blog.csdn.net/Allenlzcoder/article/details/80532200中也用了动态规划的方法。5中维护的是矩阵的左下三角,此题中维护的是右上三角,两种思路,注意区分

【动态规划 回文串11】LeetCode 516. Longest Palindromic Subsequence相关推荐

  1. leetcode 516. Longest Palindromic Subsequence | 516. 最长回文子序列(递归 -> 傻缓存 ->DP)

    题目 https://leetcode.com/problems/longest-palindromic-subsequence/ 题解 1.递归(超时) 递归 -> 傻缓存 ->DP c ...

  2. 【Hard 递归 动态规划 回文串15】LeetCode 730. Count Different Palindromic Subsequences

    LeetCode 730. Count Different Palindromic Subsequences 博客转载自:http://zxi.mytechroad.com/blog/dynamic- ...

  3. 【动态规划 回文串13】LeetCode 647. Palindromic Substrings

    LeetCode 647. Palindromic Substrings Solution1:我的答案 动态规划,易解 class Solution { public:int countSubstri ...

  4. 【回文串1 动态规划 马拉车算法】LeetCode 5. Longest Palindromic Substring

    LeetCode 5. Longest Palindromic Substring LeetCode中与回文串相关的免费的题目共有15道(5, 9, 125, 131, 132, 214, 234, ...

  5. 【回文串5 重点+动态规划】LeetCode 132. Palindrome Partitioning II

    LeetCode 132. Palindrome Partitioning II Solution1:我的答案1 直接模仿131那道题的DFS解法,找其中size最小的.果不其然,因为超时只能部分AC ...

  6. LeetCode之最大回文串--动态规划

    1. 题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1:输入: "babad"输出: "bab" 注意: ...

  7. C#LeetCode刷题之#409-最长回文串(Longest Palindrome)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3788 访问. 给定一个包含大写字母和小写字母的字符串,找到通过这 ...

  8. 《LeetBook》leetcode题解(5):Longest Palindromic [M]——回文串判断

    我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...

  9. AK F.*ing leetcode 流浪计划之回文串

    欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击. 文章目录 一.简介 二.解题步骤 三.作用 四.经典算法介绍 判断一个串是否为回文串(单次查询) 普通情况 判断指定字符 多次子 ...

最新文章

  1. [转] 为什么javascript是单线程的却能让AJAX异步调用?
  2. WPF - Group分组对ListBox等列表样式的约束
  3. 王者荣耀全栈项目部署到阿里云服务器笔记
  4. Redis简单案例(二) 网站最近的访问用户
  5. 我妈妈的优点:做事情特别细致
  6. 前端开发利器webStorm 3.0配置使用
  7. 【Linux】一步一步学Linux——apt-get命令(278)
  8. 一步一步学动画[1]:Silverlight中Animation的应用
  9. linux php版本升级_玩转Linux,介绍一个强大的Linux服务器管理面板,比宝塔更强...
  10. scikit-learn安装
  11. python练手经典100例微盘_20个Python练手经典案例,能全做对的人确实很少!
  12. 【数据结构和算法05】 红-黑树(转发)
  13. Composer的Autoload源码实现2——注册与运行
  14. python tqdm模块的简单使用
  15. noip2013 day1
  16. 极化SAR数据超像素分割和密度峰值聚类
  17. android 信鸽推送点击消息跳转问题,信鸽推送 Android 跳转Activity
  18. linux开发工具少_从设计到开发,我必不可少的10种工具
  19. 定位系统完美拍档——无线继电器
  20. 使用 FUMA 鉴定 Independent SNPs 和 Lead SNPs

热门文章

  1. [原创]c# 加解密通用类
  2. laravel services.php,「Laravel框架中使用Service模式」- 海风纷飞Blog
  3. map python2 python3 兼容,Python2与Python3兼容
  4. linux 软路由_软路由和硬路由的区别分析
  5. mycat定时向mysql存储数据_【实战演练】Linux操作系统20-MyCat实现Mysql数据库读写分离与自动切换...
  6. 不同网段的局域网怎么互通_智能化工程中,局域网IP地址不够用怎么解决?
  7. excel制作录入和查询系统_Excel进销存管理系统,完整函数应用,出入查询库存更新自动显示...
  8. TensorFlow实现条件批归一化(Conditional Batch Normalization)
  9. Ubuntu18.04安装OpenCV4.3.0和环境配置(支持编译CUDA并安装配置python-opencv)
  10. Java String到int,Java int到String