leetcode 16. 最長迴文子序列 java

題目:

給定一個字符串s,找到其中最長的迴文子序列。能夠假設s的最大長度爲1000。ui

示例 1:
輸入:spa

"bbbab"
輸出:code

4
一個可能的最長迴文子序列爲 "bbbb"。blog

示例 2:
輸入:leetcode

"cbbd"
輸出:字符串

2
一個可能的最長迴文子序列爲 "bb"。io

解題:

思路:

    • 狀態
      f[i][j] 表示 s 的第 i 個字符到第 j 個字符組成的子串中,最長的迴文序列長度是多少。class

    • 轉移方程
      若是 s 的第 i 個字符和第 j 個字符相同的話gui

      f[i][j] = f[i + 1][j - 1] + 2遍歷

      若是 s 的第 i 個字符和第 j 個字符不一樣的話

      f[i][j] = max(f[i + 1][j], f[i][j - 1])

      而後注意遍歷順序,i 從最後一個字符開始往前遍歷,j 從 i + 1 開始日後遍歷,這樣能夠保證每一個子問題都已經算好了。

    • 初始化
      f[i][i] = 1 單個字符的最長迴文序列是 1

    • 結果
      f[0][n - 1]

class Solution { public int longestPalindromeSubseq(String s) { int n = s.length(); int[][] f = new int[n][n]; for (int i = n - 1; i >= 0; i--) { f[i][i] = 1; for (int j = i + 1; j < n; j++) { if (s.charAt(i) == s.charAt(j)) { f[i][j] = f[i + 1][j - 1] + 2; } else { f[i][j] = Math.max(f[i + 1][j], f[i][j - 1]); } } } return f[0][n - 1]; } } 做者:a380922457 連接:https://leetcode-cn.com/problems/longest-palindromic-subsequence/solution/dong-tai-gui-hua-si-yao-su-by-a380922457-3/
來源:力扣(LeetCode) 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
相關文章
相關標籤/搜索