题目链接:https://leetcode.com/problems/longest-palindromic-subsequence/description/
题目大意:找出最长回文子序列(不连续),第5题是最长回文子串。
法一(借鉴):dp,与5题,最长回文子串进行比较,这个dp更难一点。代码如下(耗时51ms):
1 //dp公式:dp[i,j]=2表示下标i到j的字符串中,最长回文子序列长度是2 2 //当s[i]=s[j]时,dp[i,j]=dp[i+1,j-1]+2 3 //当s[i]!=s[j]时,dp[i,j]=max(dp[i+1,j],dp[i,j-1]) 4 public int longestPalindromeSubseq(String s) { 5 int length = s.length(); 6 int dp[][] = new int[length][length]; 7 for(int i = length - 1; i >= 0; i--) {//从后向前dp计算,不知道为什么。。。 8 dp[i][i] = 1; 9 for(int j = i + 1; j < length; j++) {//逐一查看每个字符串中的字符序列是否有回文 10 if(s.charAt(i) == s.charAt(j)) { 11 dp[i][j] = dp[i + 1][j - 1] + 2; 12 } 13 else { 14 dp[i][j] = Math.max(dp[i][j - 1], dp[i + 1][j]); 15 } 16 } 17 } 18 return dp[0][length - 1]; 19 }