# 实现正则表达式中的 . 和 * 的功能
. 匹配任意一个字符
* 匹配0个或多个*前面一个字符
动态规范的解法:
建立匹配的状态转移方程,设存在待匹配字符串 str 和模式字符串 pat, dp[i][j] 表示 截止到str[i-1] 位置的子串与截止到 pat[j-1] 位置的模式子串匹配的结果
# 边界条件
dp[0][j] 表示空字符串与模式子串匹配结果, dp[i][0] 表示字符子串与空模式子串匹配结果, dp[i][j] 表示空子串与空模式串匹配结果
dp[0][0] 一直为 true
dp[i][0](i > 0) 一直为 false, 因为任意非空子串与空模式串匹配不能匹配上
dp[0][j](j > 0) 的值需要看模式串 pat[j-1] 是否为 * ,如果是,则 * 可以选择匹配前一个字符 0 次,即 dp[0][j] = dp[0][j-2 ]
边界条件确认了之后,就可以缺点状态转移方程了
1
2
3
4
5
6if str[i-1] == pat[j-1] or '.' == pat[j-1]
dp[i][j] = dp[i-1][j-1]
else if pat[j-1] == '*'
dp[i][j] = dp[i][j-2]
if pat[j-2] == str[i]
dp[i][j] |= dp[i-1][j]