数据结构与算法动态规划——最长回文子串

Posted buptleida

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法动态规划——最长回文子串相关的知识,希望对你有一定的参考价值。

最长回文子串

LeetCode:最长回文子串

题目描述:

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

思想:

  • 动态规划,用boolean[][] dp记录每一对字符是否相等;
  • 双循环遍历所有子串情况,每次遍历时,当前子串首尾相等且内层-1字符串dp值为true,则记录dp值为true;全部遍历完,取最长,即为最长子串;
  • 临界条件很复杂,最好在循环之前把长度小于2的情况剔除;条件中有一个i-j<3,因为小于3且首尾相等的子串一定是回文串,不需要再往内层再判断dp。

代码:

class Solution {
    public String longestPalindrome(String s) {

        int len = s.length();
        boolean[][] dp = new boolean[len][len];
        int i,j,max=0,m=0,n=0;
        if(len<2) return s;
        for(i=0;i<len;++i){
            for(j=0;j<=i;++j){
                if(s.charAt(i) == s.charAt(j)&&(i-j<3||dp[j+1][i-1])){
                    dp[j][i]=true;
                    if(i-j>max){
                        max = i-j;
                        m=j;n=i;
                    }
                }else{
                    dp[j][i]=false;
                }
            }
        }
        return s.substring(m,n+1);
    }
}

以上是关于数据结构与算法动态规划——最长回文子串的主要内容,如果未能解决你的问题,请参考以下文章

最长回文子串 (动态规划法中心扩展算法)

5. 最长回文子串(动态规划算法)

最长回文子串自顶向下动态规划

[LeetCode] 647. 回文子串 ☆☆☆(最长子串动态规划中心扩展算法)

JS动态规划计算最长回文子串

Leetcode-最长回文子串(包含动态规划以及Manacher算法)