最长回文子串长度

1 题目链接

最长回文子串长度

2 题目描述

描述

对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。
给定字符串A以及它的长度n,请返回最长回文子串的长度。

示例

输入:"abc1234321ab",12
返回值:7

3 代码实现

public class Solution {
    public int getLongestPalindrome(String A, int n) {
        boolean[][] dp = new boolean[n][n]; // 记录从i到j是否回文,这道题目,动态规划用于简化判断回文。如果不用动态规划,还需要一个循环判断回文。abcba串中的bcb串的回文判断是多余的。因为在bcb回文的时候已经判断过了
        int max = 0;
        char []charArray = A.toCharArray();
        // 循环i和循环j找到从i到j的所有字符串
        for(int j = 0; j < n; j++){
            for(int i = 0; i <= j; i++){
                // 两边的值如果相等,则根据i+1到j-1的回文状态得出i到j回文
                if(A.charAt(i) == A.charAt(j)){
                    // 二者同时指向一个位置,或者二者本身相邻,则回文
                    if(i == j || j - i == 1){  
                        dp[i][j] = true;
                    }else{
                        // 否则内部回文则回文
                        dp[i][j] = dp[i + 1][j - 1];
                    }
                    if(dp[i][j] == true){
                        max = Math.max(max,j - i + 1);
                    }
                }
            }
        }
        return max;
    }
}

5 相关例题

最长回文子串

class Solution {
    public String longestPalindrome(String s) {
        boolean [][]dp = new boolean[s.length()][s.length()];
        String maxStr = "";
        for(int j = 0; j < s.length(); j++){
            for(int i = 0; i <= j; i++){
                if(s.charAt(i) == s.charAt(j)){
                    if(i == j || i + 1 == j){
                        dp[i][j] = true;
                    }else{
                        dp[i][j] = dp[i + 1][j - 1];
                    }
                    // 区别在这,需要把回文串记录下来
                    if(dp[i][j] == true && j - i + 1 > maxStr.length()){
                        maxStr = s.substring(i, j + 1);
                    }
                }
            }
        }
        return maxStr;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木水先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值