python通配符匹配_Leetcode44. 通配符匹配 Python实现

题目要求:

bVbI4qa

bVbI4qb

bVbI4qc

思路:

两个字符串逐个匹配,会遇到三种情况

情况1:字符相等,或字符模式p中的字符为"?",那么可以比对下一位

情况2:字符不等,但字符模式p中的字符为星号(*)

!bVbI4rN

这种情况下,用一个prestar来标记遇到星号的下标,prestar初始化为-1

bVbI4rO

将字符模式p的指针移到下一个位置

bVbI4rS

并将s指针的当前指向的下标保存下来,用来标记当前对比过了

bVbI4tu

情况3:字符不等,但是prestar不为-1,也就是在这之前出现过星号

bVbI4rS

那么把s字符串的指针移到之前对比过的下一个位置,再进行比对,把match也更改到下一个位置

bVbI4tB

如果不为上述三种情况,也就是当前的两个字符不相同,之前也没有出现过星号,说明两个字符串真的不相同,返回False

核心代码:

i, j, prestar, match = 0, 0, -1, -1

while i < len(pre):

if j < len(cur) and (pre[i] == cur[j] or cur[j] == "?" ):

i += 1

j += 1

elif j < len(cur) and cur[j] == "*":

prestar = j

j += 1

match = i

elif prestar != -1:

j = prestar + 1

i = match + 1

match = i

else:

return False

完整代码:

class Solution:

def isMatch(self, pre: str, cur: str) -> bool:

i, j, prestar, match = 0, 0, -1, -1

while i < len(pre):

if j < len(cur) and (pre[i] == cur[j] or cur[j] == "?" ):

i += 1

j += 1

elif j < len(cur) and cur[j] == "*":

prestar = j

j += 1

match = i

elif prestar != -1:

j = prestar + 1

i = match + 1

match = i

else:

return False

# 上一段代码只跟踪了字符串s,也就是pre,如果字符模式p字符串后面还有字符,如果后面的字符是*,那么可以继续看下一个字符

while j < len(cur) and cur[j] == "*":

j += 1

# 如果当前位置不为字符串p的长度,说明做字符串p的*后面(如果有),还有未匹配的字符,说明两个字符串不完全匹配

return j == len(cur)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值