活跃农民
- 积分
- 713
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2014-5-18
- 最后登录
- 1970-1-1
|
本帖最后由 AndyLiu0429 于 2014-12-17 22:03 编辑
当时做regular 匹配的时候TLE,我直接把pattern 缩减了下。。举例,'aaa*' -> 'aa*'(匹配的字符串是一样的,后者表达能力更强。。)
做这道题参考了Yu 的思路,记录*的思路实在太漂亮了。
AC过了,我的代码:
def isMatch(self, s, p):
len_s, len_p = len(s), len(p)
pPointer=sPointer=0
star = -1
while sPointer < len_s:
if pPointer >= len_p:
if star != -1:
sPointer, pPointer = star
sPointer +=1
continue
else:
return False
if p[pPointer] == "?" or p[pPointer]==s[sPointer]:
pPointer+=1
sPointer+=1
elif p[pPointer] == '*':
star = (sPointer,pPointer)
pPointer+=1
else:
if star != -1:
sPointer, pPointer = star
sPointer +=1
else:
return False
if pPointer < len_p:
while pPointer < len_p and p[pPointer]=='*':
pPointer+=1
return True if pPointer == len_p else False
|
|