【leetcode算法从入门到精通】5. 最长回文子串

题目

给你一个字符串 s,找到 s 中最长的 回文 子串。

示例 1:

输入:s = "babad"

输出:"bab"

解释:"aba" 同样是符合题意的答案。

示例 2:

输入:s = "cbbd"

输出:"bb"

提示:

1 <= s.length <= 1000

s 仅由数字和英文字母组成

分析

这个问题不太会做,先抄答案吧;

复制代码
class Solution {
    public String longestPalindrome(String s) {
        int len = s.length();
        if (len < 2) {
            return s;
        }
        int maxLen = 1;
        int begin = 0;
        //dp[i][j] 表示s[i..j]是否是回文串
        boolean[][] dp = new boolean[len][len];
        // 初始化:所有长度为1的字串都是回文串
        for (int i = 0; i < len; i++) {
            dp[i][i] = true;
        }
        char[] charArray = s.toCharArray();
        // 递推开始
        // 先枚举字串长度
        for (int L = 2; L <= len; L++) {
            // 枚举左边界,左边界的上限设置可以宽松一些
            for (int i = 0; i < len; i++) {
                // 由L和i可以确定右边界 j-i+1=L 得
                int j = L + i - 1;
                // 如果右边界越界,就可以退出当前循环
                if (j >= len) {
                    break;
                }
                if (charArray[i] != charArray[j]) {
                    dp[i][j] = false;
                } else {
                    if (j - i < 3) {
                        dp[i][j] = true;
                    } else {
                        dp[i][j] = dp[i + 1][j - 1];
                    }
                }
                // 只要dp[i][L]==true 成立,就表示字串s[i..L]是回文,此时记录回文长度和起始位置
                if (dp[i][j] && j - i + 1 > maxLen) {
                    maxLen = j - i + 1;
                    begin = i;
                }
            }
        }
        return s.substring(begin, begin + maxLen);
    }
}
相关推荐
今天_也很困2 小时前
LeetCode热题100-560. 和为 K 的子数组
java·算法·leetcode
v_for_van2 小时前
力扣刷题记录2(无算法背景,纯C语言)
c语言·算法·leetcode
2301_811232982 小时前
低延迟系统C++优化
开发语言·c++·算法
alphaTao2 小时前
LeetCode 每日一题 2026/1/26-2026/2/1
算法·leetcode
Christo33 小时前
TFS-2026《Fuzzy Multi-Subspace Clustering 》
人工智能·算法·机器学习·数据挖掘
2401_857683543 小时前
C++中的原型模式
开发语言·c++·算法
s1hiyu3 小时前
C++动态链接库开发
开发语言·c++·算法
(❁´◡`❁)Jimmy(❁´◡`❁)3 小时前
CF2188 C. Restricted Sorting
c语言·开发语言·算法
We་ct3 小时前
LeetCode 54. 螺旋矩阵:两种解法吃透顺时针遍历逻辑
前端·算法·leetcode·矩阵·typescript