Redian新闻
>
请问LeetCode Wild Matching的贪心解法,为什么只需要记录最后一个*?
avatar
请问LeetCode Wild Matching的贪心解法,为什么只需要记录最后一个*?# JobHunting - 待字闺中
s*p
1
就是这题:
https://oj.leetcode.com/problems/wildcard-matching/
一直没有想明白,为什么只需要记录最后一次的*的位置,而不用管前面的*。在网上搜
了也没有找到关于这方面的解答的。
有谁能帮忙解释下?非常感谢!
avatar
b*0
2
我是这么想的
如果更前面的*匹配到当前字符的话
那我一样可以用最后一次的*来匹配到当前字符
avatar
j*g
3
这个算法的核心思想是检查p中*字符之间的字符是否在s中有相应的匹配。一旦遇到第
二个*字符,说明第一个*字符和第二个*字符之间的字符已经得到了匹配。继续检验第
二个*字符和第三个*字符是否在s中有相应的匹配。所以不需要记录前面第一个*的位置
了。
[在 sodcap (sodcap) 的大作中提到:]
:就是这题:

:...........
avatar
s*p
4
可是p两个*之前的字符串可能在s中有多个匹配。为什么在s中有了匹配,就不需要退回
到前面去了?
avatar
p*y
5
因为除了第一个匹配的p必须要有之外,其他的第二个*都能cover了。
很绕人的

【在 s****p 的大作中提到】
: 可是p两个*之前的字符串可能在s中有多个匹配。为什么在s中有了匹配,就不需要退回
: 到前面去了?

avatar
n*1
6
有没有人用python写啊? 我写的老超时。请大家指教
class Solution:
def isMatch(self, s, p):
p2 = ""
while p != p2: #Remove duplicate *
p2 = p
p = p.replace("**","*")
ls = len(s)-1
lp = len(p)-1
old_states = {-1}
for s_ptr in range(ls +1):
new_states = set();
for p_ptr in old_states:
if p_ptr >= lp:
return False
if ( p[p_ptr+1] == s[s_ptr] or p[p_ptr+1] == '?' or p[p_ptr+1]
== '*' ):
new_states.add(p_ptr+1)
if p_ptr > -1 and p[p_ptr] == '*':
new_states.add(p_ptr)
old_states = new_states
if lp in old_states:
return True
else:
return False
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。