lintcode最長迴文子串

最長迴文子串 

給出一個字符串(假設長度最長爲1000),求出它的最長迴文子串,你可以假定只有一個滿足條件的最長迴文串。

樣例

給出字符串 "abcdzdcab",它的最長迴文子串爲 "cdzdc"

分析:首先了解一下回文子串就是正着反着都一樣的字符串,例如waw,woow,woooow等。解這道題的思路就是用一個二維數組記錄這兩個數組下標內的字符串是不是迴文子串,所以這是動態規劃的思想。定義兩個變量i,j。i用來表示字符串最右端下標,j用來表示字符串最左端下標。i==j時,就是一個字符肯定是迴文子串;i-j==1時,是相鄰的兩個子串,相等也是迴文子串;i-j>=2時,就是中間最少隔一個字符的子串了,這時就可以判斷左右兩端字符是否相等再判斷中間隔得字符是不是迴文子串。下面是代碼
class Solution {
public:
    /*
     * @param s: input string
     * @return: the longest palindromic substring
     */
    string longestPalindrome(string &s) {
        // write your code here
       int dp[s.size()][s.size()]={0},left=0,right=0,len=0;
       for(int i=0;i<s.size();i++)//i從下標0開始
       {
           for(int j=0;j<=i;j++)//j最大可以等於j,相當於單個字母
           {
               dp[j][i]=(s[j]==s[i])&&((i-j<2)||(dp[j+1][i-1]));//動態規劃,這裏下標可能會小於0,可能有隱患
               if(dp[j][i]&&(i-j+1>len))//這裏和目前最大長度比較
               {
                   len=i-j+1;
                   left=j;
                   right=i;
               }
           }
       }
       return s.substr(left,len);
    }
};

最長迴文子串 

Accepted

太牛了,把AC的喜悅分享給你的朋友吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章