LeetCode刷题笔记(JAVA)——005最长回文子串

005最长回文子串

class Solution {
    public String longestPalindrome(String s) {
        int length = s.length();
        boolean[][] dp = new boolean[length][length];
        /*第一个for循环确定边界条件,字符串长度小于等于2的时候*/
        for (int i = 0; i < length; ++i) {
            dp[i][i] = true;
            if (i < length - 1 && s.charAt(i) == s.charAt(i + 1)) {
                dp[i][i + 1] = true;
            }
        }
        /*第二个for循环写出状态转移方程,遍历顺序:行从下往上,列从左往右
        * 因为当字符串长度大于2的时候,二维数组的每个状态必须由左下方的那个
        * 值确定,然而边界条件就是左下方的值(矩阵的对角线),这样就能逐个递推出来了*/
        for (int i = length - 1; i >= 0; --i) {
            for (int j = i; j < length; ++j) {
                if (j - i > 1) {
                    dp[i][j] = dp[i + 1][j - 1] && s.charAt(i) == s.charAt(j);
                }
            }
        }
        int maxLength = 0;
        int start = 0;
        for (int i = 0; i < length; ++i) {
            for (int j = i; j < length; ++j) {
                if (dp[i][j] && j - i + 1 > maxLength) {
                    maxLength = j - i + 1;
                    start = i;
                }
            }
        }
        return s.substring(start, start + maxLength);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

妙琎

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

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

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

打赏作者

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

抵扣说明:

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

余额充值