• 最长回文子串 动态规划


     public static String longestPalindrome(String s) {

     

            int length = s.length();

            boolean[][] dp = new boolean[length][length];

      //当前回文子串的最大长度

            int maxLen = 1;

            //最长回文子串的左角标

            int left = 0;

            //最长回文子串的右角标

            int right = 0;

      //先处理边界值

            dp[length-1][length-1] = true;

            for (int i = 0; i < length-1; i++) {

             //对角线

                dp[i][i] = true;

                //次对角线

                dp[i][i+1] = s.charAt(i)==s.charAt(i+1);

                //判断次对角线中是否含有最终答案

                if(dp[i][i+1]){

                    maxLen = 2;

                    left = i;

                    right = i+1;

                }

            }

     

     

            for (int j = 2; j < length; j++) {

                for (int i = 0; i <= j-2; i++) {

                 //当前两个字符是否相等

                    if(s.charAt(i)==s.charAt(j)){

                     //如果相等只需要取子串对应的值

                        dp[i][j] = dp[i+1][j-1];

                    }else {

                     //如果不相等,那么当前肯定不是回文子串

                        dp[i][j] = false;

                    }

                    //判断是否最长

                    if(dp[i][j] && j-i+1>maxLen){

                        maxLen = j-i+1;

                        left = i;

                        right = j;

                    }

                }

            }

            return s.substring(left,right+1);

        }

     

     

  • 相关阅读:
    深度学习visio作图技巧
    Django配置多个数据库(两种方法)
    企业如何才能保证自身可持续发展
    字符串资源LoadString 加速键资源TranslateAccelerator、LoadAccelerators
    MEMS:Lecture 19 Wafer bonding & package
    智能生活 App SDK 开发入门教程【内附代码段 】
    生产问题分析:批量执行慢,根据日志进行分析。
    传统安防音视频平台架构
    红队系列-溯源反制专题
    Rescue-Prime hash STARK 代码解析
  • 原文地址:https://blog.csdn.net/weixin_43803780/article/details/134278517