Leetcode—5.最长回文子串【中等】

2023每日刷题(三十五)

Leetcode---5.最长回文子串

中心扩展法算法思想

可以使用一种叫作"中心扩展法"的算法。由回文的性质可以知道,回文一定有一个中心点,从中心点向左和向右所形成的字符序列是一样的,并且如果字符串的长度为偶数的话,中心点在中间的两个字符的中间位置(不对应具体字符);如果是奇数的话,则中心点会在中间的字符上。

实现代码

cpp 复制代码
class Solution {
public:
    int findPalindrome(string s, int left, int right, int* start) {
        int len = s.size();
        while(left >= 0 && right <= len && s[left] == s[right]) {
            left--;
            right++;
        }
        left++;
        right--;
        *start = left;
        return right - left + 1;
    }

    string longestPalindrome(string s) {
        int n = s.size();
        int i = 0;
        int len1 = 0, len2 = 0;
        int start1 = 0, start2 = 0;
        int sta = 0;
        int maxlen = 0;
        while(i < n) {
            len1 = findPalindrome(s, i, i, &start1);
            len2 = findPalindrome(s, i, i + 1, &start2);
            if(len1 > maxlen || len2 > maxlen) {
                if(len1 > len2) {
                    sta = start1;
                    maxlen = len1;
                } else {
                    sta = start2;
                    maxlen = len2;
                }
            }
            i++;
        }
        return s.substr(sta, maxlen);
    }
};

运行结果

复杂度分析

● 时间复杂度:枚举所有中心点的时间复杂度为O(n),findPalindrome函数的时间复杂度仍然是O(n),因此总的时间复杂度为 O ( n 2 ) O(n^2) O(n2),其中n为字符串的长度

● 空间复杂度:O(1)

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

相关推荐
Benny_Tang1 分钟前
AT_arc180_d [ARC180D] Division into 3 题解
数据结构·c++·算法
懒人81 分钟前
Windows11系统优化指南
windows·经验分享
殷色玫瑰15 分钟前
C++ STL:stack、queue、priority_queue 与容器适配器详解
java·开发语言·数据结构·c++·算法·visualstudio
AI袋鼠帝39 分钟前
体验完千问办公送的AI硬件,回不去了...
经验分享
努力努力再努力wz1 小时前
【CUDA入门系列】CUDA编程实战:设备选择、显存管理、Kernel、Stream 与 Event 全流程梳理
开发语言·c++
Evand J1 小时前
【电机滤波例程1】PMSM永磁同步电机转速与位置估计,MATLAB程序:标准无迹卡尔曼滤波、模型说明与仿真验证
算法·matlab·电机·ekf·负载·卡尔曼滤波
我命由我123451 小时前
Photoshop - Photoshop 快速选择和更改部分图像内容
学习·职场和发展·求职招聘·职场发展·学习方法·photoshop·ps
沫璃染墨1 小时前
《从零入门Linux系统篇(五十八):线程篇·十一——线程安全与死锁详解:从可重入到多锁管理》
linux·服务器·开发语言·c++·驱动开发·安全·架构
我命由我123451 小时前
Photoshop - 了解 Photoshop
学习·职场和发展·产品运营·求职招聘·职场发展·学习方法·photoshop
打码的老程是远篁1 小时前
手把手教你玩转大模型——3. Transformer 的位置编码——模型怎么知道谁在前,谁在后?
人工智能·算法