28.最长回文子序列

class Solution {
public:
    int longestPalindromeSubseq(string s) {
        int n=s.size();
        int dp[n][n];
        memset(dp,0,sizeof(dp));
        for(int i=0; i<n;i++)dp[i][i] = 1;
        int i=0,k=1,j=k;
        while(!dp[0][n-1]){
            if(s[i]==s[j]){dp[i][j]=dp[i+1][j-1]+2;i++;j++;}
            else {dp[i][j]=max(dp[i+1][j],dp[i][j-1]);i++;j++;}
            if(j==n){
                k++;
                i=0;j=k;
            }
        }
        // for(int i=0;i<n;i++){
        //     for(int j=0;j<n;j++){
        //         cout<<dp[i][j];
        //     }
        //     cout<<endl;
        // }
        return dp[0][n-1];
    }
};

 

posted @ 2020-10-17 22:14  阿破  阅读(74)  评论(0编辑  收藏  举报