classSolution(object):defisMatch(self, s, p):
print(s,p,'...')
i,n = 0,len(p)
if s=='':return p==''or (len(p)>=2and p[1]=='*'and self.isMatch('',p[2:]))
if p=='':returnFalseif len(p)==1:return (s[0]==p[0] or p[0]=='.') and self.isMatch(s[1:],p[1:])
if s[-1]!=p[-1] and p[-1]!='.'and p[-1]!='*' :returnFalse
ch = p[0]
if ch=='.':
if p[1]=='*':
j,n_s = 0,len(s)
while j<n_s+1:
res = self.isMatch(s[j:],p[2:])
if res==False:passelse:returnTrue
j+=1returnFalseelse:#p[i+1] is normal charcterreturn self.isMatch(s[1:],p[1:])
else:#normal charcterif p[1]=='*':#match 0 or more
j = 0
n_s = len(s)-1while j<=n_s+1:
if (j>0and s[j-1]!=ch):break;
print(j,s,p,ch,s[j-1],n_s)
res = self.isMatch(s[j:],p[2:])
if res==False:passelse:returnTrue
j+=1returnFalseelse:
return ch==s[0] and self.isMatch(s[1:],p[1:])
print(Solution().isMatch("ab"
,"a*"))