LeetCode 5. Longest Palindromic Substring

来源:互联网 发布:创世纪 知乎 编辑:程序博客网 时间:2024/06/01 23:51



Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

Example:

Input: “babad”
Output: “bab”
Note: “aba” is also a valid answer.

Example:

Input: “cbbd”
Output: “bb”



其实,这是求一个最长回文子串的题,在我之前那篇文章里其实提到过一个求最长回文子串且时间复杂度为O(n)的算法——Manacher算法(可能还没写好,可以百度搜一下)。

class Solution {public:    string longestPalindrome(string s) {        return manacher(s);    }    string manacher(string s){        string temp="#";        int len[s.size()*2 + 2];        memset(len, 0, sizeof(len));        int maxLength = 0, index = 0, ans=0, ansIndex;        string ansString = "";        for(int i=0; i<s.size(); i++){            temp += s[i];            temp += '#';        }        for(int i=1; i<temp.size()-1; i++){            if(maxLength>i){                len[i]=len[2*index-i]<(maxLength-i)?len[2*index-i]:(maxLength-i);            }else{                len[i]=0;            }            while((i-len[i]-1>=0)&&(i+len[i]+1<temp.size())&&(temp[i-len[i]-1]==temp[i+len[i]+1])){                len[i]++;            }            if(i+len[i]>maxLength){                maxLength = i+len[i];                index = i;            }            if(len[i]>ans){                ansIndex = i;                ans = len[i];            }        }        ansString = s.substr((ansIndex-ans+1)/2,ans);        return ansString;    }};