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 + ... + sn
t = 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
能否構成s3
i = 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!
評論