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
- python学习日志7
- python学习日志7/30
- Python学习日志
- Python学习日志之一
- python学习日志<一>
- python日志TimedRotatingFileHandler学习
- Python学习日志
- python 打日志学习
- python学习日志--注释
- python学习日志
- python学习日志1
- python学习日志2
- python学习日志3
- python学习笔记-日志
- python学习日志--day1
- python学习日志--day2
- python学习日志--day3
- python学习日志--day4
- 陀螺仪(可用于AR/VR)
- Java1.5增加了新特性:可变参数
- 文件的断点续传(即下载),同时保存到指定目录
- 查看数据库中所有表详细信息
- NDK2Eclipse
- python学习日志7
- 【大风】【Decode the string】代码分享:sscanf函数
- 使用FormData对象提交表单及上传图片
- 北京实习总结——记住牛人那些话
- AnimationUtils认识
- ButterKnife使用详解
- django学习整理
- android底部菜单的按钮
- Oracle创建数据库