回文子串(Palindromic Substrings)—— 题解

LeetCode 647:回文子串(Palindromic Substrings)------ 题解 ✅

🔗 题目链接

👉 https://leetcode.cn/problems/palindromic-substrings/


📖 内容概要

给定一个字符串 s,统计并返回 这个字符串中回文子串的数目 。

子串是连续的,回文指正读和反读相同。

✅ 区间 DP

✅ 中心扩展思想的 DP 实现

✅ 面试高频题


💡 解题思路(核心)

一、状态定义

java 复制代码
dp[i][j] = s[i...j] 是否是回文子串

二、状态转移方程(最重要)

java 复制代码
if (s[i] == s[j]) {
    if (j - i <= 1) {
        dp[i][j] = true;      // "a" 或 "aa"
    } else {
        dp[i][j] = dp[i+1][j-1]; // 依赖内部
    }
}

✅ 外层字符相等

✅ 内部仍是回文

✅ 整体才是回文


三、遍历顺序(关键)

因为 dp[i][j] 依赖 dp[i+1][j-1]:

维度 顺序
i 从大到小
j 从小到大
java 复制代码
for (int i = len - 1; i >= 0; i--)
    for (int j = i; j < len; j++)

✅ 保证子问题先计算完成


✅ AC 代码(Java,基于你的代码)

java 复制代码
class Solution {
    public int countSubstrings(String s) {
        int res = 0;
        char[] ss = s.toCharArray();
        int len = s.length();

        boolean[][] dp = new boolean[len][len];

        for (int i = len - 1; i >= 0; i--) {
            for (int j = i; j < len; j++) {
                if (ss[i] == ss[j]) {
                    if (j - i <= 1) {
                        dp[i][j] = true;
                        res++;
                    } else if (dp[i + 1][j - 1]) {
                        dp[i][j] = true;
                        res++;
                    }
                }
            }
        }
        return res;
    }
}

⏱️ 复杂度分析

指标 复杂度
时间复杂度 O(n²)
空间复杂度 O(n²)

🔍 与其他解法的对比

解法 时间复杂度 空间复杂度 特点
中心扩展 O(n²) O(1) 面试最爱
DP(本题) O(n²) O(n²) 易理解
Manacher O(n) O(n) 偏竞赛

✅ 一句话总结

区间 DP:两端相等且内部是回文,则整体是回文。


📌 面试加分点(建议记住)

  • ✅ 为什么 i 要从大到小?
  • ✅ 为什么 j - i <= 1 要单独判断?
  • ✅ DP 与中心扩展的本质联系
  • ✅ 如何优化到 O(1) 空间?
相关推荐
一去不复返的通信er1 小时前
排序 + 双指针:力扣15三数之和
算法·leetcode
文丑颜不良啊1 小时前
LeetCode1901~1920题目解析
java·leetcode
Pniubi1 小时前
力扣3无重复字符的最长字串(滑动窗口)
算法·leetcode·职场和发展
On The Road :1 小时前
深入理解 JVM 垃圾回收:GC 是什么、如何判定垃圾、四大回收算法全解析
jvm·算法
微尘hjx2 小时前
【Deep-OC-SORT 03】多轨迹算法Deep-OC-SORT-卡尔曼滤波预测过程
算法·yolo·目标跟踪·ultralytics·车跟踪·轨迹算法·deep-oc-sort
老师我太想进步了20264 小时前
【数据结构-3】算法美学之降复杂度
数据结构·算法
机器人零零壹10 小时前
技术白皮书:iRobotCAM如何解决机器人激光切割应用中的核心难点,从CAD离线编程到双目视觉定位与轨迹自适应提升复杂空间曲线切割的精度、效率与柔性化水平
人工智能·算法
ZhengEnCi12 小时前
大模型的分类到底怎么分:从基础模型到推理模型、从通用到专用的完整图谱
算法
取名真是13 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
罗西的思考13 小时前
【轻量化复刻大模型 / KIMI K3】KDA 模块交互式演示
人工智能·算法·机器学习