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!
評論