[Hot100]10. 正则表达式匹配

这篇博客讨论了力扣热门问题10. 正则表达式匹配的动态规划解决方案。通过dp[i][j]矩阵表示字符串s的前i个字符与模式p的前j个字符的匹配状态。转移方程中,关键在于处理'*'字符,分为'*'存在和不存在两种情况,详细阐述了如何判断匹配的可能性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

10. 正则表达式匹配
困难题
动态规划:
dp[i][j] 表示 s 的前 i 个是否能被 p 的前 j 个匹配

● 转移方程: 需要注意,由于 dp[0][0] 代表的是空字符的状态, 因此 dp[i][j] 对应的添加字符是 s[i - 1] 和 p[j - 1] 。
○ 当 p[j - 1] = ‘*’ 时, dp[i][j] 在当以下任一情况为 true时等于true :
■ dp[i][j-2]
● 将字符组合 p[j - 2] * 看作出现 0 次时,能否匹配;
■ dp[i-1][j]
● 且 p[j - 2] = s[i - 1]: 即让字符 p[j - 2]多出现 1 次时,能否匹配;
● 且 p[j - 2] = ‘.’:即让字符 ‘.’ 多出现 1 次时,能否匹配;

○ 当 p[j - 1] != ‘*’ 时, dp[i][j] 在当以下任一情况为true 时等于 true :
■ dp[i - 1][j - 1]
● 且 s[i - 1] = p[j - 1]: 即让字符 p[j - 1] 多出现一次时,能否匹配;
● 且 p[j - 1] = ‘.’: 即将字符 . 看作字符 s[i - 1] 时,能否匹配;

class 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值