1092. Shortest Common Supersequence
題目網址:https://leetcode.cn/problems/shortest-common-supersequence/
題意:給兩 string
str1和str2, 返回同時以str1和str2作為 subsequence 的最短 string。如果答案不止一個, 則返回滿足條件的任意一個答案。如果從 string
T中刪除一些char(也可能不刪除, 並且選出的這些 char 可以位於T中的任意位置), 可以得到 stringS, 那麼S就是T的subsequence)注意:
str1、str2皆由小寫字母所組成。

Solution:
想法:利用 DP
1. 定義狀態:
- 首先, 會在
str1、str2前先加上一個#, 代表什麼元素都沒有的狀態dp[i][j]:str1[1:i]、str2[1:j]的 SCS 之長度2. 得到轉移方程:
- 若
str1[i] == str2[j]:此時的 SCS 為原先的 SCS 加上str1[i]即可
➔dp[i][j] = dp[i - 1][j - 1] + 1- 否則, 此時的 SCS 為原先的 SCS 加上
str1[i]或str2[j]
➔dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + 13. 初始化:
dp[0][0]:兩個空""的 SCS 為""dp[i][0]:str1[1:i]和""的 SCS 為str1[1:i]
➔dp[i][0] = i, 其中1 ≤ i ≤ mdp[0][j]:""和str2[1:j]的 SCS 為str2[1:j]
➔dp[0][j] = j, 其中1 ≤ j ≤ n最後, 再從
str1、str2、dp由後往前回推, 以構建出 SCS
class Solution { |
- time:$O(m \cdot n)$ ➔ for loop
- space:$O(m \cdot n)$ ➔
dp
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論