1957

无聊蛋疼的1957写的低端博客
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[leetcode]Longest Palindromic Substring

Posted on 2013-10-10 10:15  1957  阅读(237)  评论(0编辑  收藏  举报

最长回文子串,存在O(n)的算法,Manacher’s Algorithm

暂时还不会T_T,先用平方的算法做把,反正最长是1000

 

f[i][j]表示,i..j这段是否是回文串

那么 f[i][j] = true   i = j

                  s[i] == s[j]  i + 1 = j

                  s[i] == s[j] && f[i + 1] [j - 1]  i < j

 

class Solution {
public:
    string longestPalindrome(string s) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        if (s == "") return "";
        int len = s.length();
        bool f[len][len];
        memset(f , false , sizeof(bool) * len * len);
        int maxLen = 1;
        int start = 0;
        for(int i = 0 ; i < len ; i++){
            f[i][i] = true;
            for(int j = 0 ; j < i ; j++){
                f[j][i] = s[j] == s[i] && (i - j < 2 || f[j + 1][i - 1]);
                if(f[j][i] && i - j + 1 > maxLen){
                    maxLen = i - j + 1;
                    start = j;
                }
            }
        }
        return s.substr(start , maxLen);
    }
};