Longest Palindromic Substring

来源:互联网 发布:java 秒杀 并发 代码 编辑:程序博客网 时间:2024/06/17 14:37

http://blog.csdn.net/hopeztm/article/details/7932245


Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.


class Solution {public:    string longestPalindrome(string ss) {                string s = preProcess(ss);        int c=0, r=0;        int* p = new int[s.length()];        p[0] = 0;        p[s.length()-1] = 0;                for(int i=1;i<s.length()-1;++i){            int mirror = c - (i-c);            p[i] = (r>i)?min(r-i, p[mirror]):0; //如果r没覆盖到i,赋值为0            while(s[i+p[i]+1] == s[i-p[i]-1]){                p[i]++;            }                        if(i+p[i]>r){                r = i+p[i];                c = i;            }        }        int maxLen = 0;        int center = 0;        for(int i=1;i<s.length()-1;++i){            if(p[i] > maxLen){                maxLen = p[i];                center = i;            }        }                delete[] p;        return ss.substr((center-1-maxLen)/2, maxLen); //去掉第一个^,然后去掉maxLen到大构造string的位置,然后除于2得到原始string的位置    }    string preProcess(string s){        if(s.length() == 0){            return "^$";        }                string res = "^";        for(int i=0;i<s.length();++i){            res += "#" + s.substr(i, 1); //注意这里用substr得到新的string,作用域问题,用[]是不行的!        }                res += "#$";        return res;    }};


0 0
原创粉丝点击