LeetCode-10-正则表达式匹配

2020年12月14日未解出改题

题目

在这里插入图片描述
在这里插入图片描述

个人解

# anaconda 运行代码,因为在LeetCode中未运行通过,就不放LeetCode的代码了
s='ab'
p='.*c'
def isMatch(s,p):
    Ssize,Psize=len(s),len(p)
    Shead,Phead=0,0
    if Psize==0 or Ssize==0:
        return False
    while Shead<Ssize and Phead<Psize :
        if p[Phead]=='.' or p[Phead]==s[Shead]:
            Shead+=1
            Phead+=1
        elif p[Phead]=='*' and p[Phead-1]=='.':
            Shead=Ssize
            Phead+=1
        elif p[Phead]=='*':
            while s[Shead]==s[Shead-1]:
                if Shead+1==Ssize:
                    Shead+=1 
                    break
                Shead+=1    
            Phead+=1
        elif Phead+1<Psize and p[Phead+1]=='*':
            Phead+=2
        else:
            return False
        print(Shead,Phead)
    if Shead==Ssize and Phead==Psize:
        return True
    else :
        return False
print(isMatch(s,p))     

这个代码能够适应很多情况,但是由于是if语句拼接而成所以也成为了最致命的问题,如下面的例子:

s='ab' p='.*b'
s='aaa' p='a*a'

单纯的叠加if,显然不是良策,所以写完这句话我就要去看解析了。

详解动态规划

真的又是动态规划,现在的我虽然还有些疑惑,但是对状态转移方程又加深了理解,
多看评论

五行代码????

手画图解

权限&免责&交流声明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值