题目
分析
设p为模式串,s为输入串。
- 当p和s都是空串时,匹配。
- 当p是空串,s不是空串的时候,不匹配
- 当p当前字符不是*的时候
–如果p当前字符是.,并且前面的字符都匹配,则当前匹配
–如果p当前字符与s当前字符相等,并且前面的字符都匹配,则当前匹配 - 如果p当前字符是时
– 如果s当前字符与p去掉两个字符(包括和*前面的字符)时的字符相等,并且前面的字符都匹配,则当前匹配
– 如果s当前字符与p去掉前一个字符(也就是*)相等,并且前面的字符都匹配,则当前匹配
python代码
class Solution:
# s, pattern都是字符串
def match(self, s, pattern):
# write code here
m = len(s)
n = len(pattern)
p = pattern
match = [[False for i in range(n+1)] for j in range(m+1)]
for i in range(m+1):
for j in range(n+1):
if j==0:
if i==0:
match[i][j]=True
else:
if p[j-1]!="*":
if i>=1 and (p[j-1]==s[i-1] or p[j-1]=="."):
match[i][j]=match[i-1][j-1]
else:
if j>=2:
match[i][j]|=match[i][j-2]
if i>=1 and (s[i-1]==p[j-2] or p[j-2]=="."):
match[i][j]|=match[i-1][j]
return match[m][n]