最長迴文子串

在這裏插入圖片描述
dp[i][j]存放的是[i,j]是否是迴文區間
dp[i][j]=dp[i+1][j-1]&&(s[i]==s[j])去除兩端之間的子串是迴文子串,且兩端相等

class Solution {
public:
    string longestPalindrome(string s) {
        int maxn=0,len=s.length();
        string res="";
        if(!len)    return res;
        if(len==1)  return s;
        res=s[0];
        bool dp[1010][1010]={false};
        for(int j=0;j<len;j++)
            for(int i=j;i>=0;i--)
                if(s[i]==s[j]&&(j-i<=2||dp[i+1][j-1]))
                {
                    dp[i][j]=true;
                    if(j-i>maxn)    
                    {
                        maxn=j-i;
                        res=s.substr(i,j-i+1);
                    }
                }
        return res;

    }
};

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