📣 独立日限时特惠: VIP通行证立减$68
查看: 2146| 回复: 4
跳转到指定楼层
上一主题 下一主题
收起左侧

[动态规划] 打算背诵wildcard matching和regular expression matching

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
如题,做了一天要挂掉的感觉,看答案的code就觉得确实是这么回事,自己就是想不出来,第二次做背下来了。。。反正code不长,打算像背陋室铭一样背诵下来,刻骨铭心,以前上学那么多课文都通篇背下来了,还差这一两道题吗。。。

评分

参与人数 1大米 +2 收起 理由
hhwu + 2 给你点个赞!

查看全部评分


上一篇:解题思路分享,求加米
下一篇:你们觉得刷leetcode对编程能力有提高么?
推荐
anewme 2020-12-20 10:01:54 | 只看该作者
全局:
这两个题真的第一次做完全懵逼,后面几次做也很难一下子想出来。
但是反正就记住是从后往前去做dp,然后dp的条件很巧妙比较难想,多练几次感觉对提升dp的能力很有帮助
回复

使用道具 举报

🔗
oauth 2020-12-20 11:28:07 | 只看该作者
全局:
想算法是聪明人的事,我们需要做的就是 背诵 + 肌肉记忆

评分

参与人数 1大米 +1 收起 理由
farmeronward + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
不知道小帅 2020-12-20 14:50:48 | 只看该作者
全局:
本帖最后由 不知道小帅 于 2020-12-20 14:56 编辑

确实很不直观。
我尝试用数学推导来讲一遍wildcard matching。
首先,dp[j]的意义是对于s[0, i) 和 p[0, j)是否匹配。
然后就可以分情况讨论了。
如果s == p[j] 或者  p[j] == '?'的时候,就只需要看前面是否匹配,即dp[i + 1][j + 1] = dp【i】[j];
最tricky的一种情况是p[j] == '*'的时候,根据题意,这个可以match任意长度的字符串。
所以,
  1. dp[i + 1][j + 1] = dp[i + 1][j] OR (dp[i][j] OR dp[i - 1][j] OR ... OR dp[0][j])
复制代码
也就是这么多情况只要有一种是true就可以。我们看一下,dp[j + 1]是什么呢,只需要把上面那个式子中i代换成i - 1即可
[i]
  1. dp[i][j + 1] = dp[i][j] OR dp[i - 1][j] OR ... OR dp[0][j]
复制代码
所以,
  1. dp[i + 1][j + 1] = dp[i + 1][j] OR dp[i][j + 1]
复制代码
就是把第一个式子的后面括号里面那么多项等价代换一下。
不知道这样会不会更清楚一些。


评分

参与人数 1大米 +1 收起 理由
我想要offer真的 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
renzheshengui 2020-12-20 14:55:27 | 只看该作者
全局:
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表