lintcode-最长回文子串-200

来源:互联网 发布:网络电玩城 编辑:程序博客网 时间:2024/06/06 18:17

给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串。

样例

给出字符串 "abcdzdcab",它的最长回文子串为 "cdzdc"

挑战 O(n2) 时间复杂度的算法是可以接受的,如果你能用 O(n) 的算法那自然更好

class Solution {public:        string longestPalindrome(string& s) {        if(s.empty())            return string();        int  length=s.length();            if(1==length)            return s;        bool dp[length][length];        for(int i=0;i<length;++i){            for(int j=0;j<length;++j){                if(i>=j)                    dp[i][j] = true;                 else                    dp[i][j] = false;             }        }               int max=-1,rj,ri;        for(int offset=1;offset<length;++offset){            for(int i=0;i+offset<length;++i){                int j=i+offset;                if(s[i]!=s[j])                    dp[i][j]=false;                else{                    dp[i][j]=dp[i+1][j-1];                    if(dp[i][j]&&offset+1>max){                        max=offset+1;                        rj=j;                        ri=i;                    }                }                }        }        return s.substr(ri,max);    }};


0 0
原创粉丝点击