码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-04-03 10:34:15      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:循环   code   字符串   ges   bad   输出   etc   回文串   字符   

最长回文子串

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);
    }
}

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

标签:循环   code   字符串   ges   bad   输出   etc   回文串   字符   

原文地址:https://www.cnblogs.com/buptleida/p/12624855.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!