1、最长回文子串

寻找回文串的问题核心思想是:从中间开始向两边扩散来判断回文串

for 0 <= i < len(s):找到以 s[i] 为中心的回文串;(奇数)找到以 s[i] 和 s[i+1] 为中心的回文串 (偶数)更新答案
class Solution {public String longestPalindrome(String s) {String result="";for(int i=0;i<s.length();i++){if(result.length()<findsub_i(s,i,i).length()){result = findsub_i(s,i,i);}if(result.length()<findsub_i(s,i,i+1).length()){result = findsub_i(s,i,i+1);}}return result;}public String findsub_i(String s, int l,int r){//找以l,r为中心的最长回文子串while(l>=0 && r<s.length()){if(s.charAt(l)==s.charAt(r)){l--;r++;}else break;}if(r-l==1){//当l和r相邻时不存在回文子串return "";}else{return s.substring(l+1,r);//从下标为l+1开始到下标为r结束(不包含r,即r-1) [l+1,r)左闭右开}}
}

2、最长回文子序列

dp 数组的定义是:在子串s[i..j]中,最长回文子序列的长度为dp[i][j]

public int longestPalindromeSubseq(String s) {int n = s.length();int[][] dp = new int[n][n];for(int i=0;i<n;i++){dp[i][i] = 1;}for(int i=n-2;i>=0;i--){     //从下往上for(int j=i+1;j<n;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][n-1];}

3、最小插入次数构造回文串

dp数组,dp[i][j]的定义如下:对字符串s[i..j],最少需要进行dp[i][j]次插入才能变成回文串

若已知dp[i+1][j-1],怎么求dp[i][j]?
如果把s[i+1…j]变成回文串,那么在s[i+1…j]右边插入一个字符s[i]一定可以将s[i…j]变成回文;
同理,如果在步骤一中选择把s[i…j-1]变成回文串,在s[i…j-1]左边插入一个字符s[j]一定可以将s[i…j]变成回文。

public int minInsertions(String s) {int n = s.length();int[][] dp = new int[n][n];for(int i=0;i<n;i++){dp[i][i] = 0;//base case,当i=j,只有一个字符,本身就是回文串,不需要插入什么}for(int i=n-2;i>=0;i--){for(int j=i+1;j<n;j++){if(s.charAt(i)==s.charAt(j))dp[i][j] = dp[i+1][j-1];elsedp[i][j] = Math.min(dp[i+1][j],dp[i][j-1])+1;}}return dp[0][n-1];}

动态规划:回文串系列相关推荐

  1. 【动态规划 回文串11】LeetCode 516. Longest Palindromic Subsequence

    LeetCode 516. Longest Palindromic Subsequence 本博客转载自:http://www.cnblogs.com/grandyang/p/6493182.html ...

  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. 最长回文串--动态规划

    最长回文串–动态规划 参考:https://writings.sh/post/algorithm-longest-palindromic-substring class Solution {publi ...

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

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

  7. 求最长回文串-从动态规划到马拉车之路(上)

    要解决的问题: 给定一个字符串,要求求出这个字符串中的最长的回文串子串. 例子: cbddba的最长回文子串为 bddb cbdedba的最长回文子串为dbedb 由上面的例子可以看到,在考虑回文子串 ...

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

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

  9. leetcode系列--125.验证回文串

    leetcode系列–第125题.验证回文串 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 输入: "A ...

最新文章

  1. 26.angularJS $routeProvider
  2. BAT会看上哪样的中小公司程序员?
  3. java象棋人机代码_中国象棋人机对弈Java版源码
  4. 解决Button设置disabled后无法执行后台代码问题
  5. 机器学习实战(用Scikit-learn和TensorFlow进行机器学习)(八)
  6. java8多线程运行程序_线程,代码和数据–多线程Java程序实际运行的方式
  7. Android Studio下载、安装、配置及连接真机开发第一个App ——入门选手快进
  8. Python网页爬虫--
  9. pytorch 模型同一轮两次预测结果不一样_2020年的最新深度学习模型可解释性综述[附带代码]...
  10. 解决Linux上解压tar.gz文件报错 (gzip: stdin: not in gzip format)
  11. IDEA最全使用教程
  12. 剪贴板增强工具 Ditto
  13. 【ecshop二次开发】ecshop截取中文字符串的方法
  14. micrium ucprobe使用笔记
  15. 基于php的村镇干部绩效考核系统
  16. 英雄联盟一直连接不上服务器连接异常,LOL服务器连接异常怎么办
  17. 【综合类型第 28 篇】ReSharper 的安装、使用教程
  18. PTA 1100 校庆(Python3)
  19. 用C实现汉诺塔问题(体现每次移动时方块的位置变化和计算共移动多少次)
  20. 公公的MC开服启程之路

热门文章

  1. CountDownLatch的用法,配图版
  2. 渗流模型的实现与解读
  3. word打印为pdf去掉批注和修订记录
  4. 第3周项目2打印星花
  5. 2021年中国电影行业发展现状及重点企业对比分析:电影票房收入达472.58亿元[图]
  6. 年轻时为养家累坏腰椎,老了该怎么护腰呢
  7. 音视频开发中的队列实现
  8. XMind思维导图相关教程
  9. dell kvm java 会话报错_生产环境下戴尔 R820 kvm虚拟化部署三(virt-manager图形化安装kvm虚拟机)...
  10. AI开发神器来了!支持CPU加速优化!!