[leetcode] 【字符串】 5. Longest Palindromic Substring

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.

題意

找S中的最長迴文子串,迴文字符串。

如aba,或者abba都是迴文字符串。

題解

1、暴力破解:遍歷每個字符,以這個字符爲中心向兩邊查看是否一樣。時間複雜度是O(n^3),會超時。
或者從最大長度開始,看這個size是否是迴文,是就終止,不是就嘗試size-1的可能。
2、動態路徑規劃   這是我現在要使用的方法  
設狀態爲{f(i,j)},表示區間[i,j]是否爲迴文串,則狀態轉移方程爲

這樣作出狀態函數即可求出最長迴文子串了
class Solution {
public:
    string longestPalindrome(string s) {
        const int n=s.size();
        bool f[n][n];
        fill_n(&f[0][0],n*n,false);
        int max_len=1,start=0;
        for(int i=0;i<n;i++)
        {
            f[i][i]=true;
            for(int j=0;j<i;j++)
            {
                f[j][i]=(j+1==i&&s[j]==s[i])||(i>j+1&&f[j+1][i-1]&&s[j]==s[i]);
                if(f[j][i]&&i-j+1>max_len)
                {
                    max_len=i-j+1;
                    start=j;
                }
            }
        }
        return s.substr(start,max_len);
    }
};


3、更快的O(n)的算法,等待我下次更新·········


發佈了83 篇原創文章 · 獲贊 32 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章