对于字符串A,其中绝对不含有字符’.’和’’。再给定字符串B,其中可以含有’.’或’’,’’字符不能是B的首字符,并且任意两个’’字符不相邻。exp中的’.’代表任何一个字符,B中的’’表示’’的前一个字符可以有0个或者多个。请写一个函数,判断A是否能被B匹配。
给定两个字符串A和B,同时给定两个串的长度lena和lenb,请返回一个bool值代表能否匹配。保证两串的长度均小于等于300。
测试样例:
“abcd”,4,”.*”,2
返回:true
dp[i][j] 代表a[0~i-1]和b[0~j-1]是否匹配
def solution(a,b):
dp = [[False for i in range(len(b+1))] for j in range(a+1)]
dp[0][0] = True
for i in range(1, len(a+1)):
for j in range(1, len(b+1)):
if b[j-1] == "*":
dp[i][j] = dp[i-1][j-1] or dp[i][j-1] or dp[i-1][j]
elif b[j-1] == ".":
dp[i][j] = dp[i-1][j-1]
else:
dp[i][j] = dp[i-1][j-1] and a[i-1] == b[j-1]
return dp[len(a)][len(b)]