一个字符串的最长回文子串

Q:求一个字符串的最长回文子串
A:经典问题

public class 最长回文子串 
{
    //第一步先决策出最长的子串的长度
    public static boolean[][] first(char[] arr)
    {
        boolean[][] dp=new boolean[arr.length][arr.length];
        for (int i=0;i<arr.length-1 ;i++ )
        {
            dp[i][i]=true;
            if (arr[i]==arr[i+1])
            {
                dp[i][i+1]=true;
            }
        }
        dp[arr.length-1][arr.length-1]=true;
        for (int len=3;len<=arr.length ;len++ )
        {
            for (int i=0;i<=arr.length-len ;i++ )
            {
                //i=arr.length-len时,j刚好为arr.length-1
                int j=i+len-1;
                if (arr[i]==arr[j]&&dp[i+1][j-1])
                {
                    dp[i][j]=true;
                }
            }
        }
        return dp;
    }
    //第二步从第一步的决策,还原出最长的子串
    public static String second(char[] arr,boolean[][] dp)
    {
        String str=null;
        int len=arr.length-1;
        int i=0;
        outer:
        while (len>0)
        {
            i=0;
            for (int j=i+len;j<=arr.length-1 ;i++,j++ )
            {
                if (dp[i][j])
                {
                    str= new String(arr,i,j-i+1);
                    break outer;
                }
            }
            len--;
        }
        return str;
    }
    public static void main(String[] args) 
    {
        String str="AABACD";
        char[] arr=str.toCharArray();
        boolean[][] dp=first(arr);
        System.out.println(second(arr,dp));
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最长回文子串——Manacher 算法 1. 问题定义 最长回文字符串问题:给定一个字符串,求它的最长回文子串长度...
    林大鹏阅读 2,793评论 0 6
  • 上一篇KMP算法之后好几天都没有更新,今天介绍最长回文子串。 首先介绍一下什么叫回文串,就是正着读和倒着读的字符顺...
    zero_sr阅读 2,333评论 2 8
  • 这次要记录的是一个经典的字符串的题目,也是一个经典的马拉车算法的实践。相信在很多地方都会考到或者问到这道题目,这道...
    柠檬乌冬面阅读 2,929评论 0 9
  • 问题定义 最长回文子串问题:给定一个字符串,求它的最长回文子串长度。 解法1:暴力解法 找到字符串的所有子串,判断...
    HITMiner阅读 696评论 0 2
  • 字符串最长回文子串 题目描述: 给定一个字符串,求它的最长回文子串的长度。 分析和解法: 最容易想到的办法是枚举所...
    MinoyJet阅读 665评论 0 2