第五天

14 篇文章 0 订阅

第五天

今天leetcode 晚上的时候挂掉了。。

今天主要的时间都用来写报告了

图形学报告,,,c#报告。。。。

本来想非递归实现的,最后死于如果s都被匹配上p是否呗用完的纠结上。。

最后还是递归实现吧。


def isMatch(s, p):
    len1 = len(s)
    len2 = len(p)
    dp = []
    dp2 = []
    dp.append(1)
    dp2.append(1)
    for i in range(len1):
        dp.append(0)
        dp2.append(0)
    for x in range(1,len2+1):
        if p[x-1] == '*':
            continue
        if x<len2:
            if p[x]=='*':
                for y in range(1,len1+1):
                    if s[y-1] == p[x-1]or p[x-1] == '.':
                        dp[y] = max(dp2[y-1],dp[y-1])
                temp = dp2
                dp2 = dp
                dp = temp
                continue

        for y in range(1,len1+1):
            if s[y-1] == p[x-1] or p[x-1] == '.':
                dp[y] = dp2[y-1]
        print dp
        temp = dp2
        dp2 = dp
        dp = temp
    if dp[len1] == 1:
        return True
    else:
        return False
print isMatch('aaa','aaaa')

递归实现代码


class Solution:
    # @param {string} s
    # @param {string} p
    # @return {boolean}
    def isMatch(self, s, p):
        if not s and not p:
            return True

        if not p and s:
            return False

        if p[-1] == '*':
            rep = p[-2]
            if s and (s[-1] == rep or rep == '.'):
                return self.isMatch(s[:-1], p) or self.isMatch(s, p[:-2]) 
            else:
                return self.isMatch(s, p[:-2])
        else:
            if s and (p[-1] == s[-1] or p[-1] == '.'):
                return self.isMatch(s[:-1], p[:-1])
            else:
                return False

明天继续研究这个题, 一定要非递归实现成功一次,贵在坚持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值