【动态规划 回文串11】LeetCode 516. Longest Palindromic Subsequence
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相关推荐
- leetcode 516. Longest Palindromic Subsequence | 516. 最长回文子序列(递归 -> 傻缓存 ->DP)
题目 https://leetcode.com/problems/longest-palindromic-subsequence/ 题解 1.递归(超时) 递归 -> 傻缓存 ->DP c ...
- 【Hard 递归 动态规划 回文串15】LeetCode 730. Count Different Palindromic Subsequences
LeetCode 730. Count Different Palindromic Subsequences 博客转载自:http://zxi.mytechroad.com/blog/dynamic- ...
- 【动态规划 回文串13】LeetCode 647. Palindromic Substrings
LeetCode 647. Palindromic Substrings Solution1:我的答案 动态规划,易解 class Solution { public:int countSubstri ...
- 【回文串1 动态规划 马拉车算法】LeetCode 5. Longest Palindromic Substring
LeetCode 5. Longest Palindromic Substring LeetCode中与回文串相关的免费的题目共有15道(5, 9, 125, 131, 132, 214, 234, ...
- 【回文串5 重点+动态规划】LeetCode 132. Palindrome Partitioning II
LeetCode 132. Palindrome Partitioning II Solution1:我的答案1 直接模仿131那道题的DFS解法,找其中size最小的.果不其然,因为超时只能部分AC ...
- LeetCode之最大回文串--动态规划
1. 题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1:输入: "babad"输出: "bab" 注意: ...
- C#LeetCode刷题之#409-最长回文串(Longest Palindrome)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3788 访问. 给定一个包含大写字母和小写字母的字符串,找到通过这 ...
- 《LeetBook》leetcode题解(5):Longest Palindromic [M]——回文串判断
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
- AK F.*ing leetcode 流浪计划之回文串
欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击. 文章目录 一.简介 二.解题步骤 三.作用 四.经典算法介绍 判断一个串是否为回文串(单次查询) 普通情况 判断指定字符 多次子 ...
最新文章
- [转] 为什么javascript是单线程的却能让AJAX异步调用?
- WPF - Group分组对ListBox等列表样式的约束
- 王者荣耀全栈项目部署到阿里云服务器笔记
- Redis简单案例(二) 网站最近的访问用户
- 我妈妈的优点:做事情特别细致
- 前端开发利器webStorm 3.0配置使用
- 【Linux】一步一步学Linux——apt-get命令(278)
- 一步一步学动画[1]:Silverlight中Animation的应用
- linux php版本升级_玩转Linux,介绍一个强大的Linux服务器管理面板,比宝塔更强...
- scikit-learn安装
- python练手经典100例微盘_20个Python练手经典案例,能全做对的人确实很少!
- 【数据结构和算法05】 红-黑树(转发)
- Composer的Autoload源码实现2——注册与运行
- python tqdm模块的简单使用
- noip2013 day1
- 极化SAR数据超像素分割和密度峰值聚类
- android 信鸽推送点击消息跳转问题,信鸽推送 Android 跳转Activity
- linux开发工具少_从设计到开发,我必不可少的10种工具
- 定位系统完美拍档——无线继电器
- 使用 FUMA 鉴定 Independent SNPs 和 Lead SNPs
热门文章
- [原创]c# 加解密通用类
- laravel services.php,「Laravel框架中使用Service模式」- 海风纷飞Blog
- map python2 python3 兼容,Python2与Python3兼容
- linux 软路由_软路由和硬路由的区别分析
- mycat定时向mysql存储数据_【实战演练】Linux操作系统20-MyCat实现Mysql数据库读写分离与自动切换...
- 不同网段的局域网怎么互通_智能化工程中,局域网IP地址不够用怎么解决?
- excel制作录入和查询系统_Excel进销存管理系统,完整函数应用,出入查询库存更新自动显示...
- TensorFlow实现条件批归一化(Conditional Batch Normalization)
- Ubuntu18.04安装OpenCV4.3.0和环境配置(支持编译CUDA并安装配置python-opencv)
- Java String到int,Java int到String