97. Interleaving String
題目網址:https://leetcode.cn/problems/interleaving-string/
題意:給三個 string
s1、s2、s3, 返回s3是否是由s1和s2交錯組成的。兩個 sting
s、t交錯的定義與過程如下, 其中每個 string 都會被分割成若干個 non-empty substring:
s = s1 + s2 + ... + snt = t1 + t2 + ... + tm|n - m| <= 1- 交錯是
s1 + t1 + s2 + t2 + s3 + t3 + ...或t1 + s1 + t2 + s2 + t3 + s3 + ...注意:
a + b代表 stringa和b串接。


Solution:
想法:利用 DP, 其中
dp[i][j]表示s1前i個 char 和s2前j個 char 能否構成s3前i + j個 char
dp[i][j]為true有兩種情況:
s1[i - 1] == s3[i + j - 1] && dp[i - 1][j]
- 當
s1的最後一個 char 等於s3最後一個 char- 且
s1前i - 1個 char、s2前j個 char 能構成s3前i + j - 1個 chars2[j - 1] == s3[i + j - 1] && dp[i][j - 1]
- 當
s2的最後一個 char 等於s3最後一個 char- 且
s1前i個 char、s2前j - 1個 char 能構成s3前i + j - 1個 char滿足上面公式的
i、j必須≥ 1, 否則dp[i - 1][j]、dp[i][j - 1]會越界也就是說
dp[i][j]只考慮了i, j ≥ 1的情況, 並沒有考慮到:
i = 0, j = 0: 也就是s1、s2皆為""時, 能否組成s3 = ""i = 0 ~ m, j = 0: 也就是s2為""時, 僅靠s1能否構成s3i = 0, j = 0 ~ n: 也就是s1為""時, 僅靠s2能否構成s3
class Solution { |
- time:$O(m \cdot n)$ ➔ for loop
- space:$O(m \cdot n)$ ➔
dp
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論