补充文章内容

This commit is contained in:
ember 2025-09-02 00:39:40 +08:00
parent ea2bb6188c
commit 8c0dd58bed

View File

@ -2,7 +2,7 @@
title: 两字符串系列DP问题归纳
description: 两字符串二维DP系列问题
date: 2025-08-31T21:50:00+08:00
lastmod: 2025-08-31T21:51:00+08:00
lastmod: 2025-09-02T00:39:00+08:00
slug: 子序列dp
# image: helena-hertz-wWZzXlDpMog-unsplash.jpg
categories:
@ -156,3 +156,26 @@ $dp[0][j] = 0$$dp[i][0] = 0$。
- `dp[i][0] = (dp[i-1][0] && s1[i-1] == s3[i-1]) `1 <= i <= m。
- `dp[0][j] = (dp[0][j-1] && s2[j-1] == s3[j-1]) `1 <= j <= n。
- <strong>必须检查:</strong>如果`s1.size() + s2.size() != s3.size()`,则直接`return false`
# 通配符匹配
给你一个输入字符串 (`s`) 和一个字符模式 (`p`) ,请你实现一个支持 `'?'``'*'` 匹配规则的通配符匹配:
- `'?'` 可以匹配任何单个字符。
- `'*'` 可以匹配任意字符序列(包括空字符序列)。
判定匹配成功的充要条件是:字符模式必须能够 **完全匹配** 输入字符串(而不是部分匹配)。
## DP公式
`dp[i][j]`代表的是`s[0..i-1]``p[0..j-1]`能否匹配(`bool`类型)。
- 如果 $p[j-1] = '?'$ 或者 $p[j-1] = s[i-1]$,则 $dp[i][j] = dp[i-1][j-1]$。
- 如果 $p[j-1] = '*'$,则 $dp[i][j] = dp[i-1][j]\ ||\ dp[i][j-1]$。
- 其他情况下,$dp[i][j] = false$。
## 边界条件
- `dp[0][0] = true`,表示空字符串可以匹配空字符串。
- `dp[i][0] = false`1 <= i <= m表示在非空字符串中匹配空字符串显然不可能。
- `dp[0][j]``true`当且仅当`p[0..j-1]`中全是`'*'`1 <= j <= n。