动态规划之字符串通配


对于字符串A,其中绝对不含有字符’.’和’’。再给定字符串B,其中可以含有’.’或’’,’’字符不能是B的首字符,并且任意两个’’字符不相邻。exp中的’.’代表任何一个字符,B中的’’表示’’的前一个字符可以有0个或者多个。请写一个函数,判断A是否能被B匹配。

给定两个字符串A和B,同时给定两个串的长度lena和lenb,请返回一个bool值代表能否匹配。保证两串的长度均小于等于300。

测试样例:
“abcd”,4,”.*”,2
返回:true

dp[i][j] 代表a[0~i-1]和b[0~j-1]是否匹配

def solution(a,b):
    dp = [[False for i in range(len(b+1))] for j in range(a+1)]
    dp[0][0] = True
    for i in range(1, len(a+1)):
        for j in range(1, len(b+1)):
            if b[j-1] == "*":
                dp[i][j] = dp[i-1][j-1] or dp[i][j-1] or dp[i-1][j]
            elif b[j-1] == ".":
                dp[i][j] = dp[i-1][j-1]
            else:
                dp[i][j] = dp[i-1][j-1] and a[i-1] == b[j-1]
    return dp[len(a)][len(b)]

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值