题目
解答
代码
class Solution(object):
def isMatch(self, s, p):
"""
:type s: str
:type p: str
:rtype: bool
"""
i=0
while i<len(p):
if i<len(s):
if p[i]!=s[i]:
if p[i]=='*':
n=0
for j in s[i:]:
if j!=s[i-1]:
break
else:
n+=1
pist=list(p)
pist.insert(i,s[i-1]*n)
del pist[i+1]
p= "".join(pist)
i+=n
elif p[i]=='.':
if i+1<len(p):
if p[i+1]!='*':
pist=list(p)
pist.insert(i,s[i])
del pist[i+1]
p= "".join(pist)
i+=1
else:
if i+2<len(p):
p=p[i+2:]
s=s[len(s)-len(p):]
i=-1
else:
return True
else:
return True
else:
if i+1<len(p):
if p[i+1]=='*':
pist=list(p)
del pist[i]
del pist[i]
p= "".join(pist)
i=i-1
else:
return False
else:
return False
i+=1
else:
return False
if len(p)<len(s):
return False
else:
return True
结果
没有弄出来,目前的代码还有个别情况考虑不进去,因为自己一开始的想法就已经偏了,后面才知道应该从字符串的末尾开始考虑会更好。这个代码,是从第一个位置开始考虑,所以if-else语句特别多,讨论了非常多种情况,但是写了很久改了很久还是没有全部包含进去。个人是想之后再练习这一题,今天的算法练习已经花了近三个小时,远远超过原计划,为了不影响别的学习任务,就先做到这一步,日后再修改完善。