5. 最长回文子串

Posted 这是一个很随便的名字

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5. 最长回文子串相关的知识,希望对你有一定的参考价值。

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

示例 1:

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

输入:s = "cbbd"
输出:"bb"
示例 3:

输入:s = "a"
输出:"a"
示例 4:

输入:s = "ac"
输出:"a"
 

提示:

1 <= s.length <= 1000
s 仅由数字和英文字母(大写和/或小写)组成


class Solution {
public:
    string longestPalindrome(string s) {
        char ss[2000+5];
        ss[0]='$';
        int n = 1;
        for(int i = 0;i<s.size();i++)
        {
            ss[n++] = '#';
            ss[n++] = s[i];
        }
        ss[n++] = '#';
        ss[n++] = '^';
        ss[n] = 0;
        int p[2000+5]={0};
        int mx = 0;
        int id = 1;
        int mxlen = 0;
        int pos = 0;//记录最长的位置
        for(int i = 1;i<n;i++)
        {
            if(i<mx)
            p[i]=min(p[2*id-i],mx-i);
            else p[i]=1;
            while(ss[p[i]+i]==ss[i-p[i]]) p[i]++;
            if(mx<p[i]+i)
            {
                mx = p[i]+i;
                id = i;
            }
            if(p[i]-1>mxlen)
            {
                pos = i-p[i];
                mxlen = p[i]-1;
            }
        }
        return s.substr(pos/2,mxlen);
    }

};

以上是关于5. 最长回文子串的主要内容,如果未能解决你的问题,请参考以下文章

leectcode 动态规划5.最长回文子串

LeetCode 5 最长回文子串

leetcode-5 最长回文子串(动态规划)

5. 最长回文子串

5-最长回文子串

[5]. 最长回文子串