97. Interleaving String
因为如果可以实现交替,就必然满足|n - m| <= 1
这个条件,所以这个条件可以不用考虑
dp:
- 递归
- 带memory的递归top-down
- bottom-up
递归
1 | class Solution { |
但是在递归过程中,如果有些部分有几个重复的连续串,那么就会产生运算的交叠,所以使用memo来规避已经计算过的内容
sample:
top-down
1 | class Solution { |
bottom-up
dp[i][j]表示(0..i)的s1子串和(0..j)的s2子串,如果他们可以交错成一个(0...i+j+1)的s3子串,那么就是true
2种情况
- 当
s1[i]!=s3[i+j+1] && s2[j]!=s3[i+j+1]
,那么绝对为false,因为某尾匹配不了 - 当
s1[i]==s3[i+j+1]
时,那么结果等同于dp[i-1][j]
,最后一位把s1[i]匹配走了,那么如果之前都匹配成功,就是true了,当s2[j]==s3[i+j+1]
时同理
base:
当一个子串为空串时候的匹配结果
1 | class Solution { |
优化空间
1 | class Solution { |
review
1 | class Solution { |