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]; } };