Leetcode-最长回文子串

Leetcode-最长回文子串
题目描述
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例一

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

示例二

输入: "cbbd"
输出: "bb"

思路:一开始我采用的方法有点像中心向外扩散法,只不过我开始想的比较菜,是从外向里寻找,这样运算量远远大于了中心向外扩散法,而且编程的难度也很大,首先要定左端点从右端点向左遍历寻找,遍历一轮后,在将左端点移动一位,重复右端点的遍历寻找,在这个过程中还要进行回文的比较。最后超出内存限制了,于是我就去借鉴了大佬的解题方法。

以下是中心扩散法获取最大回文子串

class Solution {
public:
    string longestPalindrome(string s) {
        int len=s.size();
        if(len==0||len==1)
            return s;
        int start=0;//记录回文子串起始位置
        int end=0;//记录回文子串终止位置
        int mlen=0;//记录最大回文子串的长度
        for(int i=0;iend-start+1)
            {
                start=i-(mlen-1)/2;
                end=i+mlen/2;
            }
        }
        return s.substr(start,mlen);
        //该函数的意思是获取从start开始长度为mlen长度的字符串
    }
private:
    int expendaroundcenter(string s,int left,int right)
    //计算以left和right为中心的回文串长度
    {
        int L=left;
        int R=right;
        while(L>=0 && R

你可能感兴趣的:(Leetcode-最长回文子串)