题目链接: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     }
View Code

相关文章:

  • 2021-12-30
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-30
  • 2021-06-28
猜你喜欢
  • 2021-10-28
  • 2021-08-13
  • 2021-10-02
  • 2021-08-26
  • 2021-09-03
相关资源
相似解决方案