516. Longest Palindromic Subsequence
題目網址:https://leetcode.cn/problems/longest-palindromic-subsequence/
題意:給一 string
s, 找出其中最長的回文 subsequence, 並返回該 subsequence 的長度。subsequence:不改變 char 順序的情況下, 刪除某些 char 或者不刪除任何 char 形成的一個 sequence。

Solution:
想法:利用 DP
1. 定義狀態:
- 首先, 會在
s前先加上一個#, 代表什麼元素都沒有的狀態dp[i][j]:區間s[i:j]中最長回文 subseq 之長度2. 得到轉移方程:
- 若
s[i] == s[j], 則取出小區間s[i + 1][j - 1]+ 2
➔dp[i][j] = dp[i + 1][j - 1] + 2- 否則, 取
dp[i][j - 1]、dp[i + 1][j]這兩個小區間中較大者
➔dp[i][j] = max(dp[i][j - 1], dp[i + 1][j])3. 初始化:
dp[i][i]:當區間中只有一個 char 時, 最長回文 subseq 之長度為1, 其中1 ≤ i ≤ n- 其餘區間之初始值皆設
0
class Solution { |
- time:$O(n^2)$ ➔ for loop
- space:$O(n^2)$ ➔
dp
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論