[leetcode刷题系列]Longest Palindromic Substring

来源:互联网 发布:天价域名排行 编辑:程序博客网 时间:2024/06/06 09:29

这个题至少是存在nlogn的解法的,利用后缀数组。是否存在O(n)的解法已经不记得了。印象中似乎是有O(n)。有兴趣的同学可以去研究下。

另外这个题还可以利用二分+哈希的做法去解,复杂度同样是nlogn.

由于nlogn的写法太长了。 而这个题目的n最大规模只是1000而已。所以就简单的优化了下。用了最坏情况下n^2的解法。

const static int MAXN = 1000 + 10;string s;int dp[MAXN][MAXN];bool is(int i, int j){    if(i >= j)        return true;    if(dp[i][j] != -1)        return dp[i][j];    if(s[i] != s[j])        return dp[i][j] = 0;    return dp[i][j] = is(i + 1, j - 1);}class Solution {public:    string longestPalindrome(string s) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        if(s.size() <= 1)            return s;        ::s = s;        memset(dp, 0xff, sizeof(dp));        for(int i = s.size(); i >= 1; -- i)            for(int j = 0; j + i - 1 < s.size(); ++ j)                if(is(j, j + i - 1))                    return s.substr(j, i);        return s.substr(0, 1);    }};


原创粉丝点击