一、正则表达式
问题:
请实现一个函数用来匹配包括'.'和'*'的正则表达式。
1.模式中的字符'.'表示任意一个字符
2.模式中的字符'*'表示它前面的字符可以出现任意次(包含0次)。
在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
def match(self , str , pattern ):
lens=len(str)
lenp=len(pattern)
dp=[[False for i in range(lenp+1)] for j in range(lens+1)]
dp[0][0]=True
for i in range(1,1+lenp):
if pattern[i-1]=='*':
if i-2>=0 :
dp[0][i]=dp[0][i-2]
i=j=1
while i<=lens:
j=1
while j<=lenp:
if pattern[j-1]=='*':
if j-2>=0 and (str[i-1]==pattern[j-2] or pattern[j-2]=='.'):
dp[i][j]=dp[i-1][j] or dp[i][j-2]
else:
dp[i][j]=dp[i][j-2]
elif pattern[j-1]=='.':
dp[i][j]=dp[i-1][j-1]
else:
dp[i][j]=(dp[i-1][j-1] and str[i-1]==pattern[j-1])
j=j+1
i=i+1
return dp[-1][-1]