力扣题库--5.最长回文子串 c++解法

一、题目描述

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

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

二、示例

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

三、思路

暴力:回文字符串有两种情况:一种长度为奇数,其中心是一个字符;另一种长度为偶数,其中心是两个相同字符。从头到尾遍历字符串,判断以单个字符为中心 以该字符和其后字符为中心的回文子串长度(中心扩展),记录最大长度及其头尾下标。

优化:动态规划+中心扩展 马拉车(有时间再学QAQ)

时间复杂度:两层循环 O(n^2)

空间复杂度:无额外空间 O(1)

四、代码

class Solution {
public:
string str;//保存结果
int len;//最大长度
int l,r;//最长回文字串的头尾下标
    string longestPalindrome(string s) {
        len=0;
        l=1;
        r=0;
        str=s[0];
        for(int a=0;al)
        {
            str="";
            for(int a=l;a<=r;a++)str+=s[a];
        }
        return str;
    }

    //以a,b为中心,向两边扩散,记录回文子串长度
    void judge(string s,int a,int b)
    {
        while(a>=0&&blen)
        {
            len=b-a-1;
            l=a+1;
            r=b-1;
        }
    }
};

你可能感兴趣的:(力扣,c++,leetcode,开发语言)