当前位置: 首页 > article >正文

【C/C++】最长回文子串(leetcode T5)

核心考点:回文+字符串匹配+中心扩展法

题目描述

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

示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

示例 2:

输入:s = "cbbd"
输出:"bb"

题目解析:

class Solution {
public:
    // 辅助函数:从中心向两侧扩展,寻找回文串
    string palindrome(string s, int l, int r) {
        // 在字符串范围内扩展,左右字符相等时继续扩展
        while (l >= 0 && r < s.length() && s[l] == s[r]) {
            l--; // 左指针左移
            r++; // 右指针右移
        }
        string res;
        // 截取当前找到的回文串
        for (int i = l + 1; i <= r - 1; i++) {
            res += s[i];
        }
        return res;
    }

    // 主函数:寻找最长回文子串
    string longestPalindrome(string s) {
        string res = ""; // 用于存储最长回文子串
        for (int i = 0; i < s.length(); i++) {
            // 以单个字符为中心,寻找奇数长度回文串
            string s1 = palindrome(s, i, i);
            // 以两个字符为中心,寻找偶数长度回文串
            string s2 = palindrome(s, i, i + 1);
            // 选择长度更长的回文串更新结果
            res = s1.length() > res.length() ? s1 : res;
            res = s2.length() > res.length() ? s2 : res;
        }
        return res;
    }
};

思路分析

这道题的目标是寻找字符串 s 中的最长回文子串。回文字符串即正读和反读都相同的字符串。

解题思路:中心扩展法

  1. 中心扩展思想

    • 回文串的特点是中心对称,因此可以从每个字符或两个字符之间的间隙作为中心,向两侧扩展,检查是否为回文。
    • 若左右字符相等,继续向外扩展,直到不满足回文条件为止。
  2. 分为两种情况进行扩展:

    • 单字符中心(奇数长度回文串):从一个字符作为中心扩展。
    • 双字符中心(偶数长度回文串):从相邻的两个字符作为中心扩展。
  3. 记录最长回文串:

    • 每次扩展结束后,若得到的回文串长度超过当前最大长度,则更新结果。

时间复杂度

  • 中心扩展法的时间复杂度为:O(n2)(每个字符可能扩展到字符串长度的一半)

空间复杂度

  • 只使用了若干个辅助字符串和指针,空间复杂度为: O(1)

http://www.kler.cn/a/588198.html

相关文章:

  • docker引擎与docker-compose离线版本下载详细教程
  • 深入TA-Lib:量化技术指标详解
  • 用 Pinia 点燃 Vue 3 应用:状态管理革新之旅
  • Leetcode-132.Palindrome Partitioning II [C++][Java]
  • C++复试笔记(五)
  • Adobe Premiere Pro2023配置要求
  • 矩阵幂(矩阵k次幂)
  • nginx配置反向代理数据库等插件的原理和方式
  • Matlab 基于磁流变阻尼器的半主动车辆座椅悬架模糊控制研究
  • SUSHI交易所:安全生态赋能Meme热潮
  • 豆包大模型-语音实时通话-青青-服务器ECS踩坑过程
  • JavaScript内置对象
  • C++和标准库速成(四)——逻辑比较运算符、三向比较运算符、函数和属性
  • C++初阶——类和对象(二)
  • C语言之文件
  • Docker文件夹上传秘籍Windows下的高效传输之道
  • Java集成WebSocket实现消息推送,详细步骤以及出现的问题如何解决
  • 【C#】Http请求设置接收不安全的证书
  • ES6(1) 简介与基础概念
  • 解决 Redis 后台持久化失败的问题:内存不足导致 fork 失败