python学习日志7

来源:互联网 发布:linux c file 头文件 编辑:程序博客网 时间:2024/05/16 05:39

leetcode之wildcard matching解法

这个是通配符的匹配与实现,只用到*,?两个字符

第一次思考之这个问题,用到了函数递归方法,即先将判断出*的字符串截取,继续调用isMatch()这个函数

class WildcardMatching(object):    def isMatch(self,s,p):        i=0        j=0        t=0        if len(s)<self.reallen(p):            return False        while i<len(s):#这里只判断?号            if j<len(p) and (p[j]==s[i] or p[j]=='?'):                j+=1                i+=1                continue#这里判断*号            elif j<len(p) and p[j]=='*':                while j<len(p):                    if p[j]=='*':                        j+=1                    else:                        break                if j==len(p):                    return True                else:                    t=len(s)-self.reallen(p[j:])                    while i<=t:                        if p[j]==s[i] or p[j]=='?':                            if self.isMatch(s[i:],p[j:]):                                return True                        i+=1                    if i==t+1:                        return False            else:                return False        return True    def reallen(self,l):        return len(l)-l.count('*')


但是最后超时了,python函数调用虽然方便,但是底层的实现还是用C语言,对于字符串的操作如果是截取,还是很浪费时间的,另外递归也可以用循环来代替,所以把上面的代码整合成下面的代码了,但是总体的思路是一样的,所以以后写代码,还是要注意质量

class WildcardMatch(object):    def isMatch(self,s,p):        i=0        j=0        m=0        n=0        if len(s)<len(p)-p.count('*'):            return False        while i!=len(s):            if j<len(p) and (p[j]=='?' or p[j]==s[i]):                i+=1                j+=1                continue            if j<len(p) and p[j]=='*':                n=j                j+=1                m=i                continue            if n<len(p) and p[n]=='*':                j=n+1                i=m+1                m+=1                continue            return False        while j<len(p) and p[j]=='*':            j+=1        return j==len(p)

这里学习python已经一个月了,自己还是个小白,希望大神多多指点

更多leetcode解题源码,请查看我的github地址https://github.com/Jum1023/leetcode


0 0
原创粉丝点击