最长回文子串(两种方法)

题目描述

给定一个字符串,求字符串的最长回文子串

解法

  1. 中心扩散法
  2. 动态规划法

中心扩散法
从一个点出发,比较周围的字符能否加入到回文串中,如果可以,更新回文串长度

    public static String reseveString(String str){

        int start = 0;//最长回文串开始的标志
        int maxLen = 0;//最长回文串的长度

        //考虑aba的部分
        for(int i = 1; i < str.length()-1;i++){
            int left = i-1;
            int right = i+1;
            while(left >= 0 && right <str.length()&&str.charAt(left)==str.charAt(right)){
                if(maxLen < right - left + 1){
                    start = left;
                    maxLen = right - left + 1;
                }
                left--;
                right++;
            }

        }


        // 考虑abba情况
        for(int i = 0; i < str.length()-1;i++){
            int left = i;
            int right = i + 1;
            while(left >= 0 && right < str.length()&& str.charAt(left)==str.charAt(right)){
                if(maxLen < right - left + 1){
                    start = left;
                    maxLen = right - left + 1;
                }
                left--;
                right++;
            }
        }

        return str.substring(start,start+maxLen);
    }

动态规划
dp[i][j] = dp[i-1][j+1]+2
当前回文串基于子串

    public static String reserveDp(String str){
        int start = 0;
        int end = 0;
        int maxLen = 0;

        boolean dp[][] = new boolean[str.length()][str.length()];

        for(int j = 0; j < str.length();j++){
            for(int i = 0; i < j;i++){
                if(str.charAt(i)==str.charAt(j)&&(j-i<=2||dp[i+1][j-1])){
                    dp[i][j] = true;
                    if(maxLen < j - i + 1){
                        maxLen = j - i + 1;
                        start = i;
                        end = j;
                    }
                }
            }
        }

        if(start == end){
            return Character.toString(str.charAt(0));
        }

        return str.substring(start,start+maxLen);
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容