查看: 2191| 回复: 5
跳转到指定楼层
上一主题 下一主题
收起左侧

求助Wildcard Matching

全局:

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

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

x
本帖最后由 Snake_tomoyo 于 2015-2-24 15:15 编辑

https://oj.leetcode.com/problems/wildcard-matching/
https://oj.leetcode.com/discuss/21634/c-dp-solution
上面是原题,下面是discussion里面的一种dp解法,我完全理解不了转移方程(2)。。。
按我的理解,f(i,j)应该为真当且仅当f(m,j-1)有一个为真, 0<=m<=i,但他这种做法的转移方程不仅depends on f(i,j-1), 甚至还扯上了 f(i-1,j), 这是最让我疑惑的地方。。。
谢谢各位解答!



上一篇:Leetcode上Roman to Integer这道题的Python答案不理解
下一篇:分享把leetcode上面的文章转成的书
🔗
Linzertorte 2015-2-25 14:46:12 | 只看该作者
全局:
我写过一个帖子。是贪心的做法。
回复

使用道具 举报

🔗
Linzertorte 2015-2-25 14:46:56 | 只看该作者
回复

使用道具 举报

🔗
 楼主| Snake_tomoyo 2015-2-27 00:06:20 | 只看该作者
全局:
Linzertorte 发表于 2015-2-25 14:46
http://www.1point3acres.com/bbs/thread-101201-1-1.html

感谢回复!
这题我已经用贪心过了,只是在看别人DP解法的时候实在理解不了转移方程于是就过来问了。
回复

使用道具 举报

🔗
stellari 2015-2-28 14:49:24 | 只看该作者
全局:
你的想法是对的,只是没有将DP贯彻到底。那个帖子中的转移方程的意思是:

如果p(1, j)在最后一个字符是'*'的情况下能够匹配s(1, i-1),那么p(1, j)肯定也能匹配s(1, i),因为多出来的s(i)可以由最后一个'*'匹配,这种情况下最后一个'*'匹配至少一个字符。这种情况其实已经包含了几乎所有的f(m, j-1)的情况。

但是如果p(1, j)不能匹配s(1, i-1),那么p(1, j)很可能不能匹配s(1, i),  只有一种情况例外:就是p(1, j-1) 本身就能匹配s(1, i),这种情况下'*'匹配0个字符。

我说你没有把DP贯彻到底的意思是:如果你已经知道了f(1, j-1)到f(i - 1, j-1)这个范围内恰有一个为真,那么现在再加上f(i, j-1), 问你f(1, j-1)到f(i, j-1)范围内是否恰有一个为真,你完全不需要重新再去看f(1, j-1)到f(i - 1, j-1)这个范围了,而只需要检查f(i, j-1)就可以。至于之前的那个范围内是否有一个为真,你只需看f(i-1,j)就知道,因为f(i-1, j)为真是建立在f(1, j-1)到f(i-1, j)这个范围内恰有一值为真的前提上的。


上述两者只要能满足一点就说明p(1, j)能够匹配s(1, i)。
回复

使用道具 举报

🔗
 楼主| Snake_tomoyo 2015-3-5 13:56:40 | 只看该作者
全局:
stellari 发表于 2015-2-28 14:49
你的想法是对的,只是没有将DP贯彻到底。那个帖子中的转移方程的意思是:

如果p(1, j)在最后一个字符是' ...

绕得好晕不过终于大概理解了*代表长度>0的情况了。。。

这是我头一次遇到感觉DP不如Greedy递归好理解的时候哈哈
回复

使用道具 举报

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

本版积分规则

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