5. 最长回文子串

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

示例1

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

示例2

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

代码

class Solution {
public:
    string longestPalindrome(string s) {
        string ss("$#");
        for(int i = 0;i < s.size();++i)
        {
            ss += s[i];
            ss += "#";
        } 
        int id = 0;
        int max = 0;
        int mid = 0;
        vector<int> p(ss.size());
        for(int i = 2;i <ss.size();++i)
        {
            if(p[id] + id > i)
                p[i] = min(p[2*id - i],p[id] + id - i);
            else
                p[i] = 1;
            while(ss[i - p[i]] == ss[i + p[i]])
                ++p[i]; 
            if(max < p[id])
            {
                max = p[id]; 
                mid = id;
            }    
            if(p[id] + id < p[i] + i)
                id = i;
        } 
        string result;
        for(int i = mid - max + 1;i < mid + max - 1;++i)
        {
            if(ss[i] != '#')
                result += ss[i];
        }
        return result;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。 示例 1: 输入: ...
    sxqiong阅读 43,491评论 11 18
  • 一、题目原型: 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。 二、题目意...
    花果山松鼠阅读 3,003评论 0 0
  • 给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串。 地址如下...
    FENGERMA阅读 2,682评论 0 0
  • 生活: 去转盘:去转盘网|网盘搜索引擎 网盘搜索引擎,提供全方面的网盘资源搜索。 蜂鸟网:蜂鸟网 - 中国专业影像...
    haoning7788阅读 6,696评论 14 95
  • 我估计再联系你,你有可能不会理我了。 你可能觉得我忘的太快了,也许还真的是吧。 但,这不是真的。 我也不知道该怎么...
    lisp阅读 1,215评论 0 3