*10. Regular Expression Matching
2019-04-26 本文已影响1人
一个想当大佬的菜鸡
10. Regular Expression Matching

class Solution(object):
def isMatch(self, s, p):
"""
:type s: str
:type p: str
:rtype: bool
"""
if len(p)==0:
return len(s)==0
elif len(p)==1:
return len(s)==1 and ( p=='.' or p==s )
elif p[1]!='*':
if len(s)==0:
return False
return (s[0]==p[0] or p[0]=='.') and self.isMatch(s[1:],p[1:])
else:
while len(s)>0 and ( s[0]==p[0] or p[0]=='.' ):
if self.isMatch(s,p[2:]):
return True
s = s[1:]
return self.isMatch(s,p[2:])
class Solution(object):
def isMatch(self, s, p):
"""
:type s: str
:type p: str
:rtype: bool
"""
m, n = len(s), len(p)
dp = [[False for i in range(n+1)] for j in range(m+1)]
dp[0][0] = True
for i in range(1, n + 1):
if p[i-1] == '*':
dp[0][i] = dp[0][i-2]
for i in range(1, m + 1):
for j in range(1, n + 1):
if p[j-1] == '*':
if s[i-1] == p[j-2] or p[j-2] == '.':
dp[i][j] = dp[i][j-2] or dp[i][j-1] or dp[i-1][j]
else:
dp[i][j] = dp[i][j-2]
else:
dp[i][j] = (s[i-1] == p[j-1] or p[j-1] == '.') and dp[i-1][j-1]
return dp[m][n]