• 5. 最长回文子串


    这题使用dp,dp[i][j]=1代表字符串中以i下标开始,以j下标结尾的字符串是回文子串,

    当dp[i][j] =dp[i + 1][j - 1],当s[i] == s[j]的时候,很明显,dp[i][i]一定为1,因为一个字符,一定是回文子串。

    class Solution {

        public String longestPalindrome(String s) {

           //习惯把String转为char[]

            char[] ss = s.toCharArray();

           //当前的回文子串长度为1

            String ans = s.substring(0,1);

            int maxLength = 1;

            //初始化dp数组

            int[][] dp = new int[ss.length][ss.length];

            for(int i = 0; i < dp.length; i++) {

                for(int j = 0; j < dp[i].length; j++) {

                    if(i == j) {

                        dp[i][j] = 1;

                    }

                }

            }

            int n = ss.length;

            //动态规划过程,要先遍历列,再遍历行。因为dp[row][colunm]依赖于

            //dp[row + 1][colunm - 1],所以要先遍历列,再遍历行

            for(int colunm = 1; colunm < n; colunm++) {

                for(int row = 0; row < colunm; row++) {

                    if(ss[row] == ss[colunm]) {

                        if(colunm - row <= 2) {

                            dp[row][colunm] = 1;

                        }

                        else {

                            dp[row][colunm] = dp[row + 1][colunm - 1];

                        }

                    }

                    if(dp[row][colunm] == 1) {

                        if(colunm - row + 1 > maxLength) {

                            maxLength = Math.max(maxLength, colunm - row + 1);

                            ans = s.substring(row, colunm + 1);

                        }

                    }

                

                }

            }

            return ans;

        }

    }

     

  • 相关阅读:
    滑动窗口算法
    在 Android 12 中使用 widget
    C#上位机系列(5)—示波器二基础代码+线条绘制
    OpenResty
    [激光原理与应用-29]:典型激光器 -1- 固体激光器
    Bandizip去除广告,注册图标,状态栏文本
    Postman —— HTTP请求基础组成部分
    Web Scraper爬虫工具(2)——采集1688供应商信息
    前端缓存汇总
    MallBook:后疫情时代下,酒店企业如何破局?
  • 原文地址:https://blog.csdn.net/qq_16725749/article/details/126250709