DP----leetcode516最长回文子序列

这个题也非常有意思:
给定一个字符串s,找到其中最长的回文子序列。可以假设s的最大长度为1000。

示例 1:
输入:

“bbbab”
输出:

4
一个可能的最长回文子序列为 “bbbb”。

示例 2:
输入:

“cbbd”
输出:

2
一个可能的最长回文子序列为 “bb”。

    public static int longestPalindromeSubseq(String s) {
       if(s.equals(""))
    	   return 0;
       int i,j,len=s.length(),dp[][]=new int[len][len],ans=1,k;
       char ch[]=s.toCharArray();
       for(i=0;i<len;i++)
    	   for(j=i;j<len;j++)
    		   dp[i][j]=1;
       for(i=0;i<len-1;i++) {
    	   if(ch[i]==ch[i+1]) {
    		   ans=2;
    		   dp[i][i+1]=2;
    	   }
       }
       for(k=2;k<len;k++) {
    	   for(i=0;i<len-k;i++) {
    		   j=i+k;
    		   if(ch[i]==ch[j]) {
    			   dp[i][j]=dp[i+1][j-1]+2;
    			   ans=Math.max(ans, dp[i][j]);
    		   }
    		   else{
    			   dp[i][j]=Math.max(dp[i+1][j], dp[i][j-1]);
    		   }
    	   }
       }
       return ans;
    }

DP----leetcode516最长回文子序列

总体来说就是动态规划,dp[i][j]表示从i到j的最长回文子序列
当ch[i]==ch[j],dp[i][j]=dp[i+1][j-1]+2,否则dp[i][j]=max(dp[i+1][j],dp[i][j-1])